This question already has answers here:
Closed 10 months ago.
What does an extra 0 in front of an int value mean?
(2个答案)
几天后我有一个C编程考试,在我得到的示例中,有一个关于位运算符的问题。现在我知道&,|,^,<>和他们做什么。
但我有点困惑:
int main()
{
int i = 021, j = 0x2A, k,l,m;
k = i | j;
l = i & j;
m = k ^ l;

printf("%d, %d, %d, %d, %d\n",i,j,k,l,m);

return 0;
}

当我测试它时,输出是:
17 42 59 0 59
但我不明白怎么做。021在二进制中是什么?
如果我把它取为21(如果我在它之前删除0,输出将完全改变)
有人能帮忙吗?

最佳答案

021在二进制中是什么?如果我把它取为21(如果我在它之前删除0,输出将完全改变)
0开头的整数文本是八进制数。如果删除0,则它是十进制数。因此021的值是2 * 8 + 1,即17。二进制表示是10001
如果删除0i的值为21,二进制表示为10101
因此,当在不同的操作中使用时,输出会相应地改变。
由于您在printf语句中使用转换说明符d,所以所有打印的值都是十进制的。

10-07 15:20