2012-09-30 141 views
0

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   ? 

能否請您幫我解釋部分在哪裏?是。

+1

'a = b'的值是5; 'a == b'的值是0 – pmg

+0

在C中,'a = b'和'a ='A''不僅僅是賦值,它們是賦值表達式,因此有值(就像'a + b '),那些是賦值給變量(分別爲'b'和''A'')的值,IOW是變量的新值(賦值後)。 –

+1

這看起來像家庭作業,應該被標記爲這樣。如果不是,請忽略此評論。 :) – leemes

回答

2
~b  -6   ? 

的「〜」翻轉所有位,負數是使用一種叫做2s complement表示。當您翻轉「5」的所有位時,就會發生-6:您得到一個不同的bitpattern,與2s補碼中的「-6」相同。

~(~a)  17  ? 

相似。翻轉所有的位,然後再翻轉所有的位,你會得到什麼?和以前一樣。

a=’A’ 65   ? 

在內部,字符用數字表示,就像計算機中的其他一切一樣。幾乎所有這些數字< - >今天使用的字符表都基於ASCII,'A'恰好在ASCII表中有65。

a|’@’ 64   ? 

這沒有意義。 '@'是64(ASCII,再次),這是十六進制0x40。 0x40 | 17應該是81.

+0

「在內部,字符用數字表示,就像計算機中的其他一切一樣。」更好一點的是:「在內部,字符由一些位表示,就像計算機中的其他所有部分一樣,如數字。」因爲數字已經是一些位的解釋*。 (否則,我們不需要像二進制補碼那樣的東西,因爲-1是一個數字!但它需要使用一些位來存儲,因此需要一種解釋和表示。) – leemes

+0

這是最複雜的答案,因爲它規範提到了我不確定是否正在使用的補碼。 –

1

~運算符是按位NOT,這意味着int的所有位都被反轉。對數字會有什麼影響取決於類型和實施。

|運算符是一個按位或運算。在C中,它與intchar完全相同,正如您在|'A'中所做的一樣。那麼char的值就是ASCII碼。

=運算符是賦值。分配的結果是分配的任何東西。

2

-是一元負數。假設沒有溢出,它只是取值的負值。負5顯然是'-5'。

~是按位補碼。我建議你看看它是如何工作的。在二進制補碼中,~x相當於-x - 1。而對於~(~a),顯然補碼的補碼是原始號碼。

對於最後兩個,你只是把一個字符視爲一個數字。這只是使用角色的ascii值。 'A'的價值是65,但我非常懷疑你的老師希望你記住他們。你可能會得到一個ASCII表。

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 '@' 
+0

@pmg到你最近的編輯...如果我們假設最後兩行是按順序執行的話,那麼結果值就是65 – Serge

+0

,但我不認爲這是OP的想法。畢竟他發佈了一堆簡單的表達式,而不是語句。 – pmg

+0

@pmg那麼你爲什麼改變64與81? – Serge

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' 
+2

''@''是一個int。沒有從/到'char'的轉換 – pmg

+0

@pmg你確定嗎?我認爲''_'(其中'_'是一個任意字符)是char類型,不是int。 – leemes

+0

在C中''_''的類型爲'int'(我相信它在C++中是不同的)。見[C2011標準](http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1570.pdf)中的6.4.4.4/10。 – pmg

1
  • =:賦值運算符。
  • ~:按位NOT運算符(每位的邏輯否定)。
  • |:按位OR運算符(邏輯包含OR每位)。