mac*_*e_1 3 c division language-lawyer
我有一个由安全编码激发的简单问题。
我遇到的情况下我必须分配除法的余数或的负值0到一个int变量,所以就用了以下符号:
int a = -(b % c);
Run Code Online (Sandbox Code Playgroud)
其中b和c都是正整数。表达(b % c)将产生一个正数或0与a将被分配的结果的负值。
如果(b % c)yield 0,-0评估结果是什么?0还是负面的0?如果后者发生,会有什么影响?
PS我不知道负面0是什么。
-(b % c) 不能产生负 0 因为 C 2018 6.2.6.2 3 说:
如果实现支持负零,则它们只能通过以下方式生成:
-所述
&,|,^,~,<<,和>>与产生这样的一个值的操作数操作符;-所述
+,-,*,/,和%运营商,其中一个操作数是负零,其结果是零;— 基于上述情况的复合赋值运算符。
即使我们将上面解释为包含-为一元运算符,我们也已经给出了b和c是正整数,因此b % c不能产生负零,因此-in的操作数-(b % c)不是负零。
如果==用于比较负零和非负零,它会产生真,因为==操作基于操作数的值,而不是它们的表示。
在现代 C 实现中,整数的负零非常罕见。现代实现绝大多数使用二进制补码,它没有负零。只有专门的/历史的/古老的实现可能会使用具有负零(一个的补码和符号和大小)的替代整数表示。浮点表示通常具有负零,但它们等于由价值相等比较积极的零(在==,!=,<,>,<=,和>=运营商)。
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |