如果x是无符号int类型,那么这些语句中是否存在差异:
return (x & 7);
和
return (-x & 7);
我知道对无符号值求反会得到
max_int - value
的值。但是,在任何特定的边界条件下,上述两个语句的返回值(即真/假)是否存在差异,或者它们在功能上是否相同? 最佳答案
测试代码:
#include <stdio.h>
static unsigned neg7(unsigned x) { return -x & 7; }
static unsigned pos7(unsigned x) { return +x & 7; }
int main(void)
{
for (unsigned i = 0; i < 8; i++)
printf("%u: pos %u; neg %u\n", i, pos7(i), neg7(i));
return 0;
}
测试结果:
0: pos 0; neg 0
1: pos 1; neg 7
2: pos 2; neg 6
3: pos 3; neg 5
4: pos 4; neg 4
5: pos 5; neg 3
6: pos 6; neg 2
7: pos 7; neg 1
对于4(以及0)的特定情况,没有区别;对于其他值,有区别。您可以扩展输入的范围,但输出将产生相同的模式。
关于c - 一元整数4的一元否定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20293599/