C专家编程:第八章:为什么程序员无法分清万圣节和圣诞节
2018-03-11 16:15
330 查看
1、C语言中的类型提升
2、隐式类型转换:算术转换、赋值转换和输出转换。
1)算术转换:进行算数运算(加、减、乘、除、取余以及符号运算)时,不同类型数必须转换成同一类型的数据才能运算,在进行运算时,以表达式中最长类型为主,将其他类型数据均转换成改类型。
2)赋值转换:进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。
3)输出转换:在程序中将数据用printf 函数以指定格式输出时,当要输出的数据类型与输出格式不符时,便自动进行类型转换。
注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则转换时将出错。如:
long a = 80000;
printf("%d\n", a);
运行结果是14464,因为 int 型允许的最大值为32767,80000超出此值,故结果取以32768为模的余数,即(80000 -32768)- 32768 = 14464;
3、函数的强制类型转换:
int(*compar) (const void*, const void*);
int intcompare(const int *i, const int *j)
{
return(*i - *j);
}
将函数 intcompare() 转换成 compar() 形式:
(int (*) (const void*, constvoid*)) intcompare
源类型 | 通常提升后的类型 |
char/unsigned char | int |
位段(bit-field) | int |
枚举(enum) | int |
short/unsigned short | int |
float | double |
任何数组 | 相应类型的指针 |
1)算术转换:进行算数运算(加、减、乘、除、取余以及符号运算)时,不同类型数必须转换成同一类型的数据才能运算,在进行运算时,以表达式中最长类型为主,将其他类型数据均转换成改类型。
2)赋值转换:进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作。
3)输出转换:在程序中将数据用printf 函数以指定格式输出时,当要输出的数据类型与输出格式不符时,便自动进行类型转换。
注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则转换时将出错。如:
long a = 80000;
printf("%d\n", a);
运行结果是14464,因为 int 型允许的最大值为32767,80000超出此值,故结果取以32768为模的余数,即(80000 -32768)- 32768 = 14464;
3、函数的强制类型转换:
int(*compar) (const void*, const void*);
int intcompare(const int *i, const int *j)
{
return(*i - *j);
}
将函数 intcompare() 转换成 compar() 形式:
(int (*) (const void*, constvoid*)) intcompare
相关文章推荐
- 《C专家编程》学习笔记(为什么程序员无法分清万圣节和圣诞节)
- C专家编程--学习笔记(1)_为什么程序员分不清万圣节和圣诞节
- Beta版本 为什么程序员总是分不清万圣节和圣诞节?因为 Oct 31 == Dec 25。
- 转载:程序员编程艺术:第八章、从头至尾漫谈虚函数
- 为什么程序员喜欢在深夜编程
- 为什么程序员不会编程?
- 程序员编程艺术:第八章、从头至尾漫谈虚函数
- 为什么说开源可以提高程序员的编程技能?
- 程序员编程艺术第二十五章:Jon Bentley:90%无法正确实现二分查找
- 【编程】为什么程序员的社会地位不高?
- 为什么有的程序员不会编程?
- 为什么开源可以提高程序员的编程技能?
- 程序员编程艺术:第八章、从头至尾漫谈虚函数
- 【水文】也谈求职中的fizz-buzz-thing,兼谈程序员为什么不会编程
- 为什么有的程序员不会编程?
- 为什么项目型软件公司很累?程序员拼死拼活做项目为啥总是无法按时完成?原因主要是软件需要完善的细节太多
- 程序员编程艺术第二十五章:Jon Bentley:90%无法正确实现二分查找
- 为什么有的程序员不会编程?
- 为什么开源可以提高程序员的编程技能?
- 【程序员编程艺术】第八章:漫谈虚函数