![](/img/trans.png)
[英]How does one store a vector<bool> or a bitset into a file, but bit-wise?
[英]How does condition statement work with bit-wise operators?
我試圖了解條件如何與按位運算符一起使用。 可以通過以下方法檢查數字是偶數還是奇數:
#include <iostream>
#include <string>
using namespace std;
string test()
{
int i = 8; //a number
if(i & 1)
return "odd";
else
return "even";
}
int main ()
{
cout << test();
return 0;
}
我不了解的部分是if條件如何工作。 在這種情況下,如果i = 8,則in If語句將執行1000 & 1
,這將返回等於8的1000。
如果i = 7,則在if語句中應該執行111 & 1
,從而返回111等於7
為什么if(8)返回“偶數”而if(7)返回“奇數”呢? 我想我想了解在處理按位運算符時,if語句檢查的是True,什么是False。
當我寫下這個問題時,只是一個想法是因為它實際上在做
for 8: 1000 & 0001 which gives 0
for 7: 0111 & 0001 which gives 1?
是的,您說對了。 二進制&
和|
一點一點地執行。 以來
1 & 1 == 1
1 & 0 == 0
0 & 1 == 0
0 & 0 == 0
我們可以看到:
8 & 1 == 1000 & 0001 == 0000
和
7 & 1 == 0111 & 0001 == 0001
您的test
函數可以正確計算一個數字是偶數還是奇數,因為a & 1
測試1位置是否有1
,而奇數只存在1。
實際上,在C,C ++和其他主要編程語言中, &
運算符對整數類型的每一位都執行AND
操作。 當且僅當兩個操作數的第n位等於1時,按位AND
的第n位等於1。
例如:
8 & 1 =
1000 - 8
0001 - 1
----
0000 - 0
7 & 1 =
0111 - 7
0001 - 1
----
0001 - 1
7 & 5 =
0111 - 7
0101 - 5
----
0101 - 5
出於這個原因AND
在偶數和1
之間進行按位AND
運算將始終等於0
因為只有奇數的最低有效位等於1
。
C ++中的if(x)
將x
轉換為布爾值。 如果整數非零,則認為該整數為true
。
因此,所有if(i & 1)
所做的就是檢查是否在i
設置了最低有效位。 如果設置,則i&1
將為非零;否則為0。 如果未設置,則i&1
將為零。
如果整數是奇數,則在整數中設置最低有效位,因此,如果i
是奇數,則i&1
為非零。
表達i & 1
,其中i
是int
,具有類型int
。 根據i
的低位的值,其值為1
或0
。 在語句if(i & 1)
,該表達式的結果按照整數類型的通常規則轉換為bool
: 0
變為false
,非零變為true
。
您說的代碼實際上是按位運算符應如何工作的。 在(8&1)的示例中:
1000 & 0001 = 0000
因為在第一個值中,最后一位設置為0,而在第二個值中,最后一位設置為1。0&1 = 0。
0111 & 0001 = 0001
在這兩個值中,最后一位均設置為1,因此由於1&1 = 1,結果為1。
我的代碼中的if語句之一存在相同的問題。 i = 1000 1000 0000 12位二進制數 x = 0000 1000 0000 12位二進制數 那么if語句的結果是什么:if(i&x)? 是if(1)還是if(0)?
問候,莫辛
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.