糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > C语言中无符号数和有符号数之间的比较和运算

C语言中无符号数和有符号数之间的比较和运算

时间:2019-08-19 02:26:24

相关推荐

C语言中无符号数和有符号数之间的比较和运算

学C语言的同学看看以下代码运行结果会多少

源代码

#include <stdio.h>void main(void){unsigned char uchar_num = 1;char schar_num = -2;unsigned int uint_num = 1;int sint_num = -2;printf("unsigned char 1 > char -2 \t= %d \r\n", (uchar_num > schar_num));printf("unsigned int 1 > int -2 \t= %d \r\n", (uint_num > sint_num));printf("unsigned char 1 > int -2 \t= %d \r\n", (uchar_num > sint_num));printf("unsigned int 1 > char -2 \t= %d \r\n", (uint_num > schar_num));printf("unsigned char 1 + int -2 \t= %d \r\n", uchar_num + sint_num);printf("unsigned int 1 + int -2 \t= %d \r\n", (uint_num + sint_num));if((uint_num + sint_num) > 0)printf("unsigned int 1 + int -2 \t大于0\r\n");elseprintf("unsigned int 1 + int -2 \t小于0\r\n");}

运行结果, 看看有没有和自己意想不到的结果。

unsigned char 1 > char -2 = 1 unsigned int 1 > int -2 = 0 unsigned char 1 > int -2 = 1 unsigned int 1 > char -2 = 0 unsigned char 1 + int -2 = -1 unsigned int 1 + int -2 = -1 unsigned int 1 + int -2 大于0[Finished in 0.1s]

亡羊补牢,基本功夯实中

出现迷糊的同学应该是这两点没搞清楚,请熟记以下两点:

1、有符号数和无符号数混合运算时(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,返回无符号数结果

2、32位机器中,比int小的整型(包括short 、unsigned short 、 unsigned char和char)在运算中都要转换成int然后进行运算

掌握以上两条准则再回头看前面运行的结果是不是觉得就合理了。

至于为什么选择转换为int,应该是从效率上考虑的,因为通常情况下int的长度被定义为机器处理效率最高的长度,比如32位机

上,一次处理4个字节效率是最高的,所以虽然short(我机器上占2个字节)更节省内存,但是在运算中的效率,是int更高。

总结

混合计算时,非int型需要转换成有符号int型,原本就有unsigned int时,其他类型全部转成unsigned int后参与计算

辅助记忆的例子:

if(u32a = 1 > s8 b = -2)

返回就是false

分析:有非int型 s8 b需要转换成s32 b,又因为有u32参与计算,s32 b又需要被转换成u32 b = 0xffff ffff ffff fffe

如果觉得《C语言中无符号数和有符号数之间的比较和运算》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。