概述
1. integral promotion:整形提升有符号或无符号的char、short、整形的位域,和枚举类型,可以在一个整形可被使用的表达式里使用,如果在int能够容纳这些类型的所有值,则这些类型被转换为int,否则被转换成unsigned int。
2. 整形转换(1)有符号整形转换成无符号整形:a.如果无符号整形跟原整形一样宽,则结果是原整形的机器码被视为无符号整形。
int i = 9;unsigned int j = i;结果 j = 9
int i = -1;unsigned int j = i;结果 j = 0xffffffff(假设int为32位类型)b.如果无符号整形位宽比原整形窄,则结果是原整形高位被截断。 int i = 0xff; unsigned char j = i;结果j = 0xff(假设short为16位) int i = -1;unsigned char j = i; 结果j = 0xff c.如果无符号整形位宽更宽,原来无符号转换成无符号整形时,高位填充0,原来有符号转换成无符号时,高位为符号扩充。 short i = -1;unsigned int j = i; 结果j = 0xffffffff; unsigned short i = 0xffff;unsigned int j = i;结果j = 0xffff; (2)无符号整形转换成有符号整形:如果转换后的有符号整形能够表示这个无符号整形的数值,则值不变,否则取决于编译器的实现。
3.算术转换如果有一个操作数是long double,另一个被转换成long double否则如果有一个操作数是double,另一个被转换成double否则如果有一个操作数是float,另一个被转换成float否则如果有一个操作数是unsigned long int,另一个被转换成unsigned long int否则如果有一个操作数是long int,另一个被转换成long int否则如果有一个操作数是long int,另一个是unsigned int,如果long int能够表示所有的unsigned int,则另一个unsigned int转换为long int, 如果long int不能表示所有的unsigned int,则两个操作上都转换成unsigned long int否则如果有一个操作数是unsigned int,另一个被转换成unsigned int否则两个操作数都将被转换成int(规则1,整形提升)
最后
以上就是难过蜻蜓为你收集整理的c的整形转换和整形提升的全部内容,希望文章能够帮你解决c的整形转换和整形提升所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复