如何评估这些表达式?

时间:2012-09-30 13:42:03

标签: c boolean-logic

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         ?
你能帮我解释一下这些部分吗?是。

6 个答案:

答案 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中,将intchar进行或运算完全有效,就像在'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)。