C语言的问题 之 有符号数和无符号数的计算
参与计算的两个变量,类型不同,则需要先转换成同一类型.
然后进行计算

转换的时候,为了保证精度不降低,需要向数据增长的方向进行转换.
比如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的情况:



还有"精度损失"的情况
在赋值运算的时候,两边数据不同类型.
赋值号右边的类型将转换为左边的类型.
a=b 如果a是int类型,b是float类型.
b=1.78然后赋值给a,那么a只保留整数部分...C语言,连四舍五入都不计算的...

http://bbs.itheima.com/thread-4473-1-1.html
还有移位的东西:

