簡體   English   中英

C ++中“ and”和“&”之間有什么區別?

[英]What is the difference between 'and' and '&' in C++?

#include <iostream>
int main(int argc, char* argv[])
{
    unsigned long mask = 0x00000001;
    unsigned long mask1 = 0x00000001;
    unsigned long mask2 = 0x00000010;
    if ((mask and mask1) && (mask and mask2))// CONDITION_1 is True.
        std::cout << "Ohhhhhhh..." << std::endl;
    if ((mask & mask1) && (mask & mask2)) //CONDITION_2 is False.
        std::cout << "No Output..." << std::endl;
    return 0;
}

我認為CONDITION_1和CONDITION_2都是False,但我的想法顯然是錯誤的,為什么C中的'and'和'&'不相同?

and&&相同。 這是合乎邏輯的。 &是按位與。

and&&是邏輯AND運算符。 它產生true ,如果兩個操作數轉換為true

bitand&是按位AND運算符。 如果兩個操作數的相應位都置1,則結果的每個位都置1。

單個“&”號是按位的,而“ and”關鍵字是&&的替代項,是邏輯“ and”。

&&and都是邏輯 and運算符,而&按位 and運算符。

所以

(mask and mask1) && (mask and mask2)

相當於

(mask && mask1) && (mask && mask2)

C / C ++中的2個“和”運算符是&&(邏輯與)和&&(按位與)。

如果兩個參數都不為零(true),則&&將返回布爾結果(true / false,1/0),否則返回false。 這用於確定兩個布爾條件是否都為真。

&將返回一個整數,並且兩個參數中的任何位都設置為(1)。 因此0b10101010和0b11110000將產生0b10100000。 這對於檢查標志或位掩碼的任何其他用途很有用(尤其是在嵌入式世界中,在該世界中,您可能會使用單個位而不是完整的字節/字/雙字作為標志)。

編輯:學習了一些新知識,並刪除了錯誤的陳述。

AND是邏輯短路&& ,而&是按位運算符,對單個位進行運算。

使用邏輯運算符時,C ++僅從左到右評估得出組合關系結果所需的內容,而忽略其余內容。

按位運算符會考慮代表它們存儲的值的位模式來修改變量。

這是一些文檔

&是二進制AND運算符。 這個操作的結果已設置為僅位11的兩個參數。

((mask and mask1) && (mask and mask2)

  • mask and mask1 == true (== mask && mask1
  • mask and mask2 == true (== mask && mask2
  • (true) && (true) == true

(mask & mask1) && (mask & mask2)

  • mask & mask1 == 0x00000001 (因為兩種情況下最低有效位均為1)
  • mask & mask2 == 0x00000000mask & mask2中為1的位在mask2中為0,反之亦然)
  • (0x00000001) && (0x00000000) ==否

AND等效於&&,被視為邏輯運算符。 和&是按位運算符。

按位AND(&)

按位AND運算符是單個&符:&。 一個方便的助記符是布爾AND和&&的小版本可用於較小的塊(位而不是字節,字符,整數等)。 本質上,二進制“與”僅以二進制形式對數字的每個位置中的位進行邏輯“與”運算。

例如,使用字節(char類型):

01001000 
& 
10111000 
--------
00001000

第一個數字的最高有效位是0,因此我們知道結果的最高有效位必須是0; 在第二個最高有效位中,第二個數字的位為零,因此我們得到相同的結果。 兩個位均為1的唯一時間(即結果唯一為1的時間)是從左數第五位。 所以,

72&184 = 8

邏輯AND(&&)邏輯AND運算符用於測試兩個條件是否為真。 如果兩個條件都為真,則邏輯AND返回true。 否則,它返回false。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM