(1). 如果你定义了一个unsigned int的变量,并赋一个负值给它会怎么样?
这时该unsigned int变量的内存表示和值为该负数的int变量的内存表示是一致的。
例如:unsigned int i = -1; 因为 -1 在作为有符号数int在内存中的表示为:ox ffff ffff,
所以该赋值操作实际上是把i置为其取值范围内的最大整数。if(i > 0) 的判断结果应该是真。
(2).如果一个操作数是无符号整数,另外一个操作数是有符号整数,那么表达式的结果就是无符号整数。
例如:unsigned int i = 4;
int j = -5;
if(i + j > 0) printf("result is unsigned!\n");
执行的结果是,printf语句被执行。因为 i + j的结果为-1,但将-1作为无符号数对待。
(3).可以想象,如果将无符号数强制转换为有符号数 或是通过无符号数赋值的方式:不改变内存表示,改变对待方式。(其实大多数强制类型转换都是这么做的,是不是全部都是呢?)
例如:int i = 0xffffffff;
printf("i = %d\n",i);
unsigned int n = 0xffffffff;
i = (int) n;
printf("i = %d\n",i);
输出的结果均为为-1。
阅读(2722) | 评论(0) | 转发(0) |