【发布时间】:2021-01-31 12:32:41
【问题描述】:
我有一个问题是在数字中设置了一些额外的位:
void print2_helper(int x) {
int isodd = x%2 != 0;
x /= 2;
if (x)
print2_helper(x);
putchar('0' + isodd);
}
printf("-7 << 16: ");
print2_helper((-7 << 16));
printf("\n(-7 << 16) | 75: ");
print2_helper((-7 << 16) | 75);
puts("\n");
输出:
-7 << 16: 1110000000000000000
(-7 << 16) | 75: 1101111111110110101
为什么简单的 |75 会产生如此奇怪的数字?
【问题讨论】:
-
port70.net/~nsz/c/c11/n1570.html#6.5.7p4 左移负数在技术上是未定义的行为(您应该使用无符号数进行算术运算)但我想这里的主要问题是为什么打印机的参数是
int x和不是unsigned x? -
19 位整数 - 有趣
-
@PSkocikis 从技术上讲,这是一种非常明确的行为
-
print2_helper 没有为负数打印正确的位表示。 -7
-
@PSkocik 你自己的回答证明你不正确。
标签: c binary bit negative-number