贵德网站建设公司,凡科官网登录页面,WordPress博客文件,人际网络网络营销是什么一、什么是整型提升 C语言的整型算术运算至少是以缺省整型类型的精度来进行的。 为了达到这个精度#xff0c;算术运算表达式中的 字符型char 和 短整型short 需要被转换为普通整型#xff0c;这种转换成为整型提升。 二、整型提升的意义 表达式的整型运算需要在CPU相应的运算… 一、什么是整型提升 C语言的整型算术运算至少是以缺省整型类型的精度来进行的。 为了达到这个精度算术运算表达式中的 字符型char 和 短整型short 需要被转换为普通整型这种转换成为整型提升。 二、整型提升的意义 表达式的整型运算需要在CPU相应的运算器件内执行CPU内整型运算器ALU的操作数字节长度一般就是int型的字节长度也是CPU的通用寄存器的长度。 通用CPU难以直接实现两个8比特位长度char或者两个16比特位长度short直接相加运算。所以表达式中各种长度小于int长度的整型值都要先转换为 int 或 unsigned int 的长度然后再送入CPU执行运算。 三、如何进行整型提升 补码的高位补符号位 举例32位环境 char a5 char b126 char cab 5的补码00000000000000000000000000000101 char类型只能存8比特位所以a中存放的是 00000101 126的补码00000000000000000000000001111110 char类型只能存8比特位所以b中存放的是 01111110 ab运算时需要进行整型提升a和b各自提升为整型长度 a中存放的是 00000101符号位是0 a整型提升为 00000000000000000000000000000101 b中存放的是 01111110符号位是0 b整型提升为 00000000000000000000000001111110 ab得补码00000000000000000000000010000011 存放于c中为 10000011 printf(%d, c)用%d 打印c需要整型提升符号位是1 c整型提升为 11111111111111111111111110000011 转换为原码 10000000000000000000000001111111 结果-125 int main()
{char a 5;char b 126;char c a b;printf(%d, c);return 0;
} 四、整型提升的实例 实例1代码如下 当ab分别与0xb6、0xb600比较时即发生了整型算数运算要进行整型提升 a0xb6二进制表示为10110110 整型提升11111111111111111111111110110110 转换为原码10000000000000000000000001001010 结果-0x4A 同理b也要进行整型提升 而c不需要整型提升 所以最后运行结果只打印c int main()
{char a 0xb6;short b 0xb600;int c 0xb6000000;if (a 0xb6)printf(a);if (b 0xb600)printf(b);if (c 0xb6000000)printf(c);return 0;
}