1

我对其中一些操作(组合按位和逻辑操作)感到困惑。

如果 x = 0x3F 和 y = 0x75,求 diff c 表达式的字节值:

1) x&y
2) x | y
3) ~x | ~y
4) x & ~y
5) x && y
6) x || y
7) !x || !y
8) x && ~y

试图

首先,我将十六进制转换为二进制:

x = 00111111
y = 01110101

这是我的尝试

1) 00110101
2) 01111111
3) 01111111
4) x & not y?  isn't the bang operator a logical operator?  what is the bit representation of !y?
5) x && y = TRUE = but how is that represented as a byte? 11111111?
6) x || y = how can this be represented as a byte?
7) !x || y = ???
8) x && ~y = ?????
4

2 回答 2

1

逻辑非运算符!将“真”值转换为“假”,反之亦然。并且由于任何非零都被认为是“真”,因此运算符简单地为任何非零返回零。

这导致x & !y为零,因为用零掩盖任何东西都是零。

“真”和“假”的逻辑值分别指定为10。这意味着逻辑运算符(即&&or||或一元!)的结果始终是1or 0

如果你结合上面的两个语句,你就会明白为什么使用 double logical-not ( !!) (你可能在某处看到过)总是返回0or 1

于 2013-09-27T07:37:38.580 回答
0

7) !x || !y = 0

最好根据 TRUE 和 FALSE 来思考,因为 || 操作员。

 X = TRUE, y = TRUE 
 --> !x = FALSE
 --> !y = FALSE
 ----> FALSE OR FALSE = FALSE (0).
于 2013-09-27T07:50:38.820 回答