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

c语言中的组合位和逻辑运算符,c,binary,bit-manipulation,bit,logical-operators,C,Binary,Bit Manipulation,Bit,Logical Operators,我对其中一些操作(结合按位操作和逻辑操作)感到困惑 如果x=0x3F且y=0x75,则查找差异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) 0111111

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

如果x=0x3F且y=0x75,则查找差异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 = ?????

逻辑not运算符
将“真”值转换为“假”,反之亦然。因为任何非零都被认为是“真的”,所以简单运算符对任何非零的都返回零

这将导致
x&!y
为零,因为用零屏蔽任何东西都是零

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


如果您将以上两个语句组合起来,您就会明白为什么使用双逻辑not(
!!
)(您可能在某处看到)总是返回
0
1
逻辑not运算符
将“真”值转换为“假”,反之亦然。因为任何非零都被认为是“真的”,所以简单运算符对任何非零的都返回零

这将导致
x&!y
为零,因为用零屏蔽任何东西都是零

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

如果将上述两条语句组合起来,您就会明白为什么使用双逻辑not(
!!
)(您可能在某处看到)总是返回
0
1

7)!x | |!y=0 对于| |运算符,最好从真与假的角度来考虑

 X = TRUE, y = TRUE 
 --> !x = FALSE
 --> !y = FALSE
 ----> FALSE OR FALSE = FALSE (0).
7) !x | |!y=0 对于| |运算符,最好从真与假的角度来考虑

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

你对3的回答是错误的
~x
的第一位有一个1,所以
~x | ~y
也必须有一个。您对3的回答是错误的
~x
的第一位有一个1,所以
~x | ~y
也必须有一个。好的,那么第5位呢?&&是逻辑的,因此x&&y返回true(因为两者都不是零),但答案的位表示是什么?11111111?@JonSmith再次阅读了我的答案。逻辑运算总是返回
0
1
。在32位机器上,
0
的位模式是
0
1
的位模式是
1
@JonSmith或
00000000000000000000000001
。不管你如何分割它,一总是一,不管你在前面放了多少个零,或者你使用哪个基数(十六进制,二进制,八进制,36)。你不会说十进制值1和十进制值01不同吧?让我们这样试试:(数字不是零)=真,真=1。是的,它是不可逆的!好的,但是5号呢是逻辑的,因此x&&y返回true(因为两者都不是零),但答案的位表示是什么?11111111?@JonSmith再次阅读了我的答案。逻辑运算总是返回
0
1
。在32位机器上,
0
的位模式是
0
1
的位模式是
1
@JonSmith或
00000000000000000000000001
。不管你如何分割它,一总是一,不管你在前面放了多少个零,或者你使用哪个基数(十六进制,二进制,八进制,36)。你不会说十进制值1和十进制值01不同吧?让我们这样试试:(数字不是零)=真,真=1。是的,它是不可逆的!然后x&&~y==TRUE&&TRUE==TRUE?我们正在接近:-)。对请注意:您最好这样写:x&&~y-->TRUE&&TRUE-->TRUE实际上,在c中,“x&&y==TRUE&&TRUE==TRUE”是一个有效的表达式(整行本身!),如果您将#define TRUE 1#define FALSE 0,然后x&&y==TRUE&&TRUE==TRUE?我们正在接近:-)。对请注意:您最好这样写:x&&~y-->TRUE&&TRUE-->TRUE实际上,在c中,“x&&&y==TRUE&&TRUE==TRUE”这是一个有效的表达式(整行本身!),如果您将#define TRUE 1#define FALSE 0