int转为short类型时产生的截断
#include<iostream>
using namespace std;
int main()
{
int a = 65533;
short b = a;
unsigned short c = a;
cout << b << endl;
cout << c << endl;
system("pause");
return 0;
}
在int存储中,a=00000000 00000000 11111111 11111101;
那么截断的时候会将前16为删去,所以转为11111111 11111101,对于b来说,是有符号类型,现在首位为1,说明是负数,而且计算出来的11111111 11111101是负数的补码,那么源码等于补码取反(符号位不变),然后加1。即为10000000 00000011,即为-3。
对于c来说,因为是无符号类型,那么源码反码补码都是11111111 11111101,即为65533。
int和unsigned int之间的运算
int main()
{
int a = -1;
unsigned int b = 16;
if (a > b)
cout << "负