![](/img/trans.png)
[英]What is the difference between a = 5, a(5), a{5} and a[5] in C++?
[英]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
運算符。 這個操作的結果已設置為僅位1
是1
的兩個參數。
((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
== 0x00000000
( mask & 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.