整型提升 |
您所在的位置:网站首页 › 补码转换为原码怎么操作视频讲解下载 › 整型提升 |
隐式类型转换
整型提升
c的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整形,这种转换称之为整型提升 整型提升的意义:表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。 因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。 通用CPU是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能会有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或者unsigned int,然后才能送入CPU去执行运算。 如何进行整型提升整型提升是按照变量的数据类型的符号位来提升的。 下面用一道题实践一下: #include int main() { char a=3; char b=127; char c=a+b; printf("%d\n",c); return 0; }上面讲到虽然a为char,但是在运算的时候会把它变成整形来运算。 a->00000011 a整型提升后->00000000 00000000 00000000 00000011 b->01111111 b整型提升后->00000000 00000000 00000000 011111111 c=a+b ->10000010 c整形提升后->11111111 11111111 11111111 10000010 但是此时c是以补码的形式存在的,这里对原码、反码、补码不了解的同学可以看原码、反码、补码详解。 因此: c的补码:11111111 11111111 11111111 10000010 c的反码:11111111 11111111 11111111 10000001 c的原码:1000000 0000000 0000000 011111110 这样我们最终打印出来的c就是 -126 这里再举一个例子 #include int main() { char a = 1; printf("%u\n", sizeof(a)); printf("%u\n", sizeof(+a)); printf("%u\n", sizeof(!a)); return 0; }这里最终结果为:1 4 1 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |