c - C 中的按位运算符,int 021 vs 21?

标签 c bit-manipulation operator-keyword

<分区>

几天后我有一个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,输出完全改变。) 有人可以帮忙吗?

最佳答案

What is 021 in binary? If I take it as 21, (if I delete the 0 before it, the output changes completely.)

0 开头的整数文字是八进制数。如果您删除 0,它就是一个十进制数。所以 021 的值是 2 * 8 + 117。二进制表示是 10001

如果去掉0,则i的值为21,二进制表示为10101。 因此,在不同的操作中使用时,输出会相应地发生变化。

由于您在 printf 语句中使用了转换说明符 d,因此打印的所有值都将是十进制。

关于c - C 中的按位运算符,int 021 vs 21?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54141577/

相关文章:

c++ - 没有 typedef 或名称的枚举

c - 为什么这个指针程序没有覆盖所有 RAM 内存位置?

c++ - 使用 list<Object*> C++ 的迭代器编译器错误

c# - 在 C# 中,x+=y 和 x=x+y(x 和 y 都是简单类型)之间是否存在任何性能差异?

c - 段错误(核心转储)

c - realloc() 的性能影响

java - 使用按位运算符的两个数字的总和

c - float 和 long 之间的异常转换

MySQL 按位运算

c++ - 在已经定义运算符C++时不匹配