#include <stdio.h> int main(void) { unsigned ui = 0; int a = 0; if(0 > (ui - 1)) a = 1; printf("%d\n",a); printf("%u\n",ui-1); }
输出结果为
0
4294967295
本人想问下,为什么a的值没有改变呢?ui 的值为0,0-1等于-1,是小于0的,得执行a=1,输出a 的值应该为1
第二个问题 ui-1的值为什么会是4294967295呢 这个数是怎么得出来的呢
解决方案
2
ui – 1 结果是unsigned int
所以 if里面的条件表达式始终是false
所以 if里面的条件表达式始终是false
18
unsigned int比int”大”
所以ui – 1中的1会转换成unsigned int进行运算,ui-1的结果也是unsigned int永远不会比0小
值 -1 赋值给unsigned int 类型的时候 存储形式为 1111,1111,1111,1111
所以ui – 1中的1会转换成unsigned int进行运算,ui-1的结果也是unsigned int永远不会比0小
值 -1 赋值给unsigned int 类型的时候 存储形式为 1111,1111,1111,1111
18
(ui – 1)的结果是unsigned int类型,所以肯定不会小于1
题主是不是应该写成;
题主是不是应该写成;
int main(void) { unsigned ui = 0; int a = 0; if(0 > (int)(ui - 1)) a = 1; printf("%d\n",a); printf("%u\n",ui-1); }