unsigned short int与short int转化问题和unsigned int与int相加问题

unsigned short int与short int转化问题和unsigned int与int相加问题

1、unsigned short int与short int转化问题

unsigned short int a=65535转化为short int型是多少呢?
unsigned short int的字节数为2,取值范围是0到2的16次方减1,即 0~65535   
int的字节数也为2,取值范围是负的2的15次方到正的2的15次方减1,即-32768~32767 
在计算机中,我们知道有符号数都是以补码表示的,所以要将无符号数从原码->反码(除符号位取反)->补码(反码加1)
65535的原码:1111 1111 1111 1111
65535的反码:1000 0000 0000 0000
65535的补码:1000 0000 0000 0001
则unsigned int类型的 65535 转化为int型为 -1(首位为符号位)

同样地,short int型转化为unsigned short int型,也是原码->反码(除符号位取反)->补码(反码加1)
例如:
-2的原码:1000 0000 0000 0010
-2的反码:1111 1111 1111 1101
-2的补码:1111 1111 1111 1110
int型的 -2 转化为 unsigned int型为 65534(首位不为符号位,没有符号位了)

特殊情况:如果符号位不为1,那么不论是无符号转为有符号,还是有符号转为无符号,那么转换结果就是要转换数的本身

2、unsigned int与int相加问题
int main()
{
int i = -20;
unsigned int j=10;

if (i + j > 0){
cout << "为正" << endl;
}
else{
cout << "为负" << endl;
}
system("pause");
return 0;
}
输出结果:"为正"
当两个不兼容的类型进行操作时,哪个能表示更大的数就转为哪个类型,例如,short+int,就要转为int,unsigned int+int就要转为unsigned int。
所以int + unsigned int时,先将int型转化为unsigned int型,-20就成了unsigned int型的一个很大的正数,再加上一个unsigned int型正数,结果肯定也是正数。

猜你喜欢

转载自blog.csdn.net/smile_yangyue/article/details/80583917