2020-02-06 09:59发布
eduhf_123 发表于 2017-1-10 18:00 J = 1000会被截断成J = 232,因为只能保留最低8位。 计算表达式J*100时存在整型提升,将J扩充到8*sizeof(u ...
最多设置5个标签!
unsigned char J=100;
I += J*1000;
那么有
(1) I += J*1000;
等效于
(2) I = I + J*1000;
在(2)里面,J*1000应该是 unsigned long格式。
那么,在式(1)里面, J*1000就不是 unsigned long了?
标注一下, PIC24里面,long是32位, int 是16位。
如果提升的话,J*100也只应该提升为int, 而不是unsigned int.
应该写成 J*100UL,这样运算会按照unsigned long进行升位
赋值运算:自动把“=”右边的表达式的类型转换成“=”右边的变量的类型,例如 int a=4.5; a的值实际是4!
混合运算:就是一个运算表达式当中包含了多个类型,这时候就需要有类型转换。当运算符两边的操作数类型不同时,其中一个操作数就要经过类型转换以和另一个操作数的类型相一致,然后才能进行运算。
变换操作数采取就高不就低的原则,即级别低的操作数先被转换成和级别高的操作数具有同一类型,然后再进行运算,结果的数据类型和级别高的操作数相同。
高 double ←← float
↑ ↑
↑ long
↑ ↑
↑ unsigned
↑ ↑
低 int ←← char,short
自动转换顺序表
顺带说一句:如果等式两端都不超过int, 那么右端运算时都自动提升为int. 如果超过int, 则提升为表达式中最高级别那个变量的级别。
一周热门 更多>