int a = 17(= 10001)
int b = 5(101)
a&b 1 bitwise AND
a|b 21 bitwise OR
a^b 20 XOR (16+4) “just one”
a&&b 1 logical AND
a||b 1 logical OR
-b -5 minus b
~b -6 ?
~(~a) 17 ?
!b 0 logical “NOT B”
!(!a)) 1 logical “NOT NOT A”
a=b 0 “a==b?”
a=’A’ 65 ?
a|’@’ 64 ?
你能帮我解释一下这些部分吗?是。
答案 0 :(得分:2)
-
是一元否定的。假设没有溢出,它只取负值。负5显然是'-5'。
~
是按位补码。我建议你查一下它是如何工作的。在两个补码中,~x
相当于-x - 1
。对于~(~a)
,显然补码的补码是原始数字。
对于最后两个,你只是将一个角色视为一个数字。这只是使用字符的ascii值。 'A'的值是65,但我非常怀疑你的老师希望你记住它们。你可能会得到一个ascii表。
答案 1 :(得分:2)
如果a = 17(10001二进制)和b = 5(101二进制),我们有:
a&b 1 bitwise AND
a|b 21 bitwise OR
a^b 20 XOR (16+4) “just one”
a&&b 1 logical AND
a||b 1 logical OR
-b -5 minus b
~b -6 bitwise NOT
~(~a) 17 bitwise NON NOT - the same as a
!b 0 logical “NOT B”
!(!a)) 1 logical “NOT NOT A”
a=b 5 assignment to a the value of b
a='A' 65 assignment to a the ASCII value of char 'A'
a|'@' 81 a OR ASCII value of char '@'
答案 2 :(得分:2)
~b -6 ?
“〜”翻转所有位,负数用2s complement表示。 -6就是当你翻转“5”的所有位时会发生什么:你得到一个不同的位模式,这与2s补码中的“-6”位相同。
~(~a) 17 ?
类似。翻转所有位,然后再次翻转所有位,你得到了什么?和以前一样。
a=’A’ 65 ?
在内部,字符由数字表示,就像计算机中的其他所有字符一样。实际上,今天使用的所有这些数字< - >字符表都基于ASCII,并且'A'恰好在ASCII表中具有数字65。
a|’@’ 64 ?
这没有意义。 '@'为64(再次为ASCII),为十六进制0x40。 0x40 | 17应该是81。
答案 3 :(得分:1)
~
运算符是按位NOT,这意味着int
的所有位都被反转。对数量有什么影响取决于类型和实现。
|
运算符是按位OR。在C中,将int
与char
进行或运算完全有效,就像在'A'中一样。然后char
的值是ASCII号。
=
运算符是赋值。分配的结果是指定的任何内容。
答案 4 :(得分:1)
~b - binary NOT b
~(~a) - binary NOT ( NOT a )
a='@' - assign the int value of '@' to a
a|'A' - bitwise OR with the int value of 'A'
答案 5 :(得分:1)
=
:作业运营商。~
:按位NOT
运算符(每个位的逻辑否定)。|
:按位OR
运算符(每个位上包含逻辑OR
)。