新手求教,关于int型变量转换为short型变量的小疑点
新手求教,关于int型变量转换为short型变量的小问题
程序如下:
#include<stdio.h>
void main()
{
int a = 32767;
short b;
b = a + 1;
printf("%d", b);
getchar();
}
输出的是-32768 是什么原因?
分析如下:
a:32767为int型转换成二进制为: 00000000 00000000 01111111 11111111
a+1不就是: 00000000 00000000 10000000 00000000 么?
怎么b就是-32768了?b 是short型 2字节 1不是符号位么?为啥不是负0呢?
------解决思路----------------------
a的值:000000000 00000000 01111111 11111111
a+1的值:000000000 00000000 100000000 00000000
b = a +1后b: 100000000 00000000
计算机看到b的最高位则认为b是负数, 负数在计算机中以补码的形式存放,求原码的运算过后,就是输出的那个结果
------解决思路----------------------
让我来清除的介绍给你吧,计算机用补码来表示数。最高位代表符号,32767赋值给short时,为0111111111111111,为最大的正short数,最高位0表示符号。当+1后,变为1+十五个0,此时代表负数,且为负数中的最大值,
程序如下:
#include<stdio.h>
void main()
{
int a = 32767;
short b;
b = a + 1;
printf("%d", b);
getchar();
}
输出的是-32768 是什么原因?
分析如下:
a:32767为int型转换成二进制为: 00000000 00000000 01111111 11111111
a+1不就是: 00000000 00000000 10000000 00000000 么?
怎么b就是-32768了?b 是short型 2字节 1不是符号位么?为啥不是负0呢?
------解决思路----------------------
a的值:000000000 00000000 01111111 11111111
a+1的值:000000000 00000000 100000000 00000000
b = a +1后b: 100000000 00000000
计算机看到b的最高位则认为b是负数, 负数在计算机中以补码的形式存放,求原码的运算过后,就是输出的那个结果
------解决思路----------------------
让我来清除的介绍给你吧,计算机用补码来表示数。最高位代表符号,32767赋值给short时,为0111111111111111,为最大的正short数,最高位0表示符号。当+1后,变为1+十五个0,此时代表负数,且为负数中的最大值,