小编Abh*_*rya的帖子

该位操作符代码是副作用(在K&R C书中使用的术语)还是机器相关的处理指令?

这是两个似乎在做相同事情的代码,但事实并非如此。运行和将输出与跟踪进行比较时,这两个不同的输出产生了混淆,因为似乎第一个代码处理是与机器相关的代码。请阅读两个代码

代码1:-

unsigned char c=(((~0 << 3) >> 4) << 1);
printf("%d", c);
Run Code Online (Sandbox Code Playgroud)

输出:-254

代码2:-

unsigned char c=(~0 << 3);
c >>= 4;
c <<= 1;
printf("%d", c);
Run Code Online (Sandbox Code Playgroud)

输出:-。30

上面代码的输出是不同的。

不仅此代码(第一个代码)引起混淆,而且涉及单行多位按位移位运算符的所有类型的代码都产生意外结果。

第二个代码执行正确。

请在您的计算机上运行此代码并验证以上输出

与/或

解释为什么这些输出不相同。

要么

最后,我们必须了解我们不应在代码中应用多个按位移位运算符。

谢谢

c bit-manipulation

4
推荐指数
1
解决办法
91
查看次数

标签 统计

bit-manipulation ×1

c ×1