我对其中一些操作感到困惑(组合按位和逻辑操作)。
如果 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 = ?????
最佳答案
逻辑非运算符 !
将“真”值变为“假”,反之亦然。由于任何非零值都被视为“真”,因此运算符简单地为任何非零值返回零。
这导致 x & !y
为零,因为用零屏蔽任何内容都是零。
“true”和“false”的逻辑值分别指定为1
和0
。这意味着逻辑运算符(即 &&
或 ||
或一元 !
)的结果始终为 1
或 0
。
如果结合上面的两个语句,您就会明白为什么使用双逻辑非 (!!
)(您可能在某处看到过)总是返回 0
或1
。
关于c中的组合位和逻辑运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19045184/