当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
但是代码中为什么直接输出a+b会等于14?
#include
问一个特别基础的问题 两个有符号数的比较,硬件是怎么做的? 比如8位的CPU,char型,-1和1 内存中的存储形式是0xff和0x01,那么计算机是如何判断出0x01大于0xff的? 如果是unsigned char型,-1和1 内存中的存储形式也仍然是0xff和0x01,那么计算机又是如何判断出0x01小于0xff的? 无符号数的时候很好理解,但是有符号数的时候,理解不了了
本帖最后由 love_wisdom 于 2012-03-31 21:37 编辑 计算机表示小数什么时候用定点数. 什么时候用浮点数? 符号数什么时候用标记位来表示, 什么用补码表示?
本帖最后由 janock 于 2011-11-04 00:29 编辑 int main(void) { unsigned int uc=-1; unsigned short us=-1; printf("sizeof(uc)=%d, max value=%d\n", sizeof(uc),uc); printf("sizeof(us)=%d, max value=%d\n", sizeof(us),us); if (uc > 2) printf("uc大于2\n"); if (us > 2) printf("us大于2\n"); return 0; } 输出如下: sizeof(uc)=4, max value=-1 sizeof(us)...
char a = -1; unsigned char b = 100; if (a > b) { cout << "a"; } else { cout << "b"; } 输出 b int a = -1; unsigned int b = 100; if (a > b) { cout << "a"; } else { cout << "b"; } 输出 a 有符号数和无符号数比较,好像都是转换为无符号数后再进行比较。第二个按这个理解没有错。因为a按符号取补码最大。 那第一个呢,该怎么解释?不大明白了。