int ia = -1;
unsigned int ua = ia;
if(ia == ua)
cout << "ia == ua";
else
cout << "ia != ua";
打印的结果为相等,
当你用一个有符号数和一个无符号数进行比较的时候,是将有符号数转换成无符号数,然后比较大小
short sa = -1;
unsigned short ua = sa;
if(sa == ua)
cout << "sa == ua" << endl;
else
cout << "sa != ua" << endl;
输出的是不等,(假设计算机是32位的)
因为short会先转换为int,unsigned short也转换成对应的int,然后再进行比较。
有符号数转换成无符号数就是直接求有符号数的补码:
正数的补码:与原码相同。
负数的补码:负数的补码等于其原码的符号位不变,数值部分的各位取反,然后整个数加1。
下题检测:
32 位机上根据下面的代码,问哪些说法是正确的?
1.signed char a = 0xe0;
2.unsigned int b = a;
3.unsigned char c = a;
[size=1em]
A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D. 上面都不对
答案选C
。。。。。。。。。。。。。。。。。。。有待补充