unsigned int 和int 问题

C语言 码拜 9年前 (2016-04-05) 1205次浏览
#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

18

unsigned int比int”大”
所以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);
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明unsigned int 和int 问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)