欢迎光临散文网 会员登陆 & 注册

C语言的问题 之 有符号数和无符号数的计算

2021-01-26 12:43 作者:GXTon_阿通  | 我要投稿


参与计算的两个变量,类型不同,则需要先转换成同一类型.

然后进行计算

 转换的时候,为了保证精度不降低,需要向数据增长的方向进行转换.

比如stm32单片机中 char :8位  int:32位  long long:64位

这里会存在bug: 在转换的时候C语言只考虑了长度,没有考虑到符号位.

比如,int->unsigned 转换的时候.

图片来源:https://blog.csdn.net/qq_47406941/article/details/112707018

所有浮点运算都以双精度精心计算.即如果是两个float,那么计算的时候也是先转换成double

再进行计算.

有"不符合人性"的情况:

如果两个数据,一个有符号,一个无符号,则转换成无符号.

那么有人会说这样不就错了吗?的确,在C语言中就是会输出错误的结果...

还有个"不符合人性"的情况:

char,short,unsigned char ,nusigned short 类型,

也就是比int短的类型,在进行运算的时候,必须转换成int型.

这里 char 转换成int 要进行位的扩展,这个时候就会出问题:

这样就可能会有多补了好几个1的情况:

显然是C语言不和里的地方,但是大家都要遵守

还有"精度损失"的情况

在赋值运算的时候,两边数据不同类型.

赋值号右边的类型将转换为左边的类型.

a=b  如果a是int类型,b是float类型.

b=1.78然后赋值给a,那么a只保留整数部分...C语言,连四舍五入都不计算的...


http://bbs.itheima.com/thread-4473-1-1.html

还有移位的东西:


C语言的问题 之 有符号数和无符号数的计算的评论 (共 条)

分享到微博请遵守国家法律