[英]Is there a difference between unary - and n -
这是我使用的gcc版本的错误.....对吗?
不,这不对。 在像gcc这样的大型编译器中进行简单的bug修复几乎是不可能的。
发生这种情况是由于“通常的算术转换”,特别是“整数提升”:
一元-
将a
提升为int
,然后(int)-2
在赋值中转换回uint8_t
,得出c == 254
(这是Z mod 2 ^ 8中-2的等价类的表示, [0,2 ^ 8))。
同样,下面的行中的二进制+
和-
提升为int
,所以我们最终得到
d == (int)b - (int)a == (int)1 - (int)2 == -1
和
e == (int)b + (int)c == (int)1 + (int)254 == 255
因此,一切都按标准要求运行良好。
原因是二进制运算符在完成工作之前经历了整数提升,并且由于int
可以保存uint8_t
所有可能值,因此使用了该选择(请参见http://en.cppreference.com/w/cpp/language/implicit_conversion#Integral_promotion )。 因此,减法作为有符号运算完成。
计算e
,将值存储在c
的行为已经导致您期望的模数学,存储254,然后将其添加到b
的值1中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.