16 位整数(短整数)的情况下,十进制 50000 就是二进制 11000011 01010000 但在有符号的情况下,二进制最左边的 1,代表这整个数字是负数但是电脑是以补码形式来表示数字的,要获得原本的数字,首先要把整个二进制数 - 11100001101010000 - 1 = 1100001101001111 然后,在把答案取反码 not 1100001101001111 = 0011110010110000 把最终答案变成十进制,就是 15536 所以,一开始的二进制数 11000011 01010000,在有符号的情况下代表的就是 -15536。
//上边的例子的二进制数为下边的运行结果,看到二进制就很好理解了!
#include
#include
usingnamespace std;
int main()
{
shortint i; // 有符号短整数
shortunsignedint j; // 无符号短整数
j =50000;
i = j;
cout <<"i:"<<i<<'\n'<<"j:"<< j<<endl;
char s[40];
_itoa_s(i, s,2);
printf("变量i的二进制数为:%s\n", s);
_itoa_s(j, s,2);
printf("变量j的二进制数为:%s\n", s);
return0;
}
结果为:
i:-15536
j:50000
变量i的二进制数为:11111111111111111100001101010000
变量j的二进制数为:1100001101010000