有符号短整数和无符号短整数区别

我运行这个程序时,设j=40000,输出-25536 40000
设j=50000,输出-15536无规律他们的关系&区别是什么呢?
#include <iostream>
using namespace std;

int main()
{
short int i; // 有符号短整数
short unsigned int j; // 无符号短整数

j = 40000;

i = j;
cout << i << " " << j;
system("pause");
return 0;
}

有无符号的整数,在计算机内存中是区别不出有无符号的,而是在程序里有区分。计算机中数据是以补码形式存放的,用二进制表示。比如:默认无符号型,只要在类型符号加

unsigned就是无符号型,Int是有符号的。其实说白了就是:定义带符号整数的,则可以存储正负整数,定义无符号整数的,则只可以存储正整数。追问

那我上面的程序怎么解释?为什么会有不同的值?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-10-08
无符号短整数范围 0 到 65535
有符号短整数范围 -32768 到 32767
超过范围后 32767+1 输出为 -32768
所以50000输出为 -32768+50000-32768=-15536
第2个回答  2018-08-02
无符号整型是 unsigned int 表示数的范围是 0-65535
有符号整型 int 表示数的范围是 -32768到32767
第3个回答  2018-09-02
short int是2个字节的 范围是 -2^(15)到 2^(15)-1 最大32767
40000>32767 发生了overflow溢出
short unsigned int同样2字节 但unsigned没有负数 范围是 0 到 2^(16)-1 最大65535
40000<65525 没有overflow 正常显示
第4个回答  2017-08-25
short int范围是-32768 ---32768,40000已经超出了,short unsigned int范围是
0-65536,j=40000时,i的值是40000-32768-32768=-25536
相似回答