c中的位和逻辑运算符组合

时间:2013-09-27 07:33:08

标签: c binary bit-manipulation bit logical-operators

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

如果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

这是我的attemtps

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 = ?????

2 个答案:

答案 0 :(得分:1)

逻辑非运算符!将“true”值变为“false”,反之亦然。并且因为任何非零被认为是“真”,所以操作符simple对于任何非零值都返回零。

这导致x & !y为零,因为屏蔽任何零都为零。

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

如果你将上述两个陈述结合起来,你会明白为什么使用双逻辑 - 不(!!)(你可能在某处看到过)总是返回01。< / p>

答案 1 :(得分:0)

7)!x || !y = 0

对于||,最好用TRUE和FALSE来思考操作

 X = TRUE, y = TRUE 
 --> !x = FALSE
 --> !y = FALSE
 ----> FALSE OR FALSE = FALSE (0).