所以我有一個位序列:進入第n位沒有條件語句
1是MSB。
我的函數需要返回0的整數,如果奇數位爲0或1,如果它是一個1
我不能使用任何for循環或自然的東西,看看我是否需要返回0或1.有沒有人有任何建議如何去做這件事。
我正在考慮使用非操作,但我可以弄清楚如何正確使用它。
到目前爲止,我正在使用一個1010 ... 10的序列,然後去做它。做到這一點上面會得到我1010.現在我需要找出我是否返回1或0.
所以我有一個位序列:進入第n位沒有條件語句
1是MSB。
我的函數需要返回0的整數,如果奇數位爲0或1,如果它是一個1
我不能使用任何for循環或自然的東西,看看我是否需要返回0或1.有沒有人有任何建議如何去做這件事。
我正在考慮使用非操作,但我可以弄清楚如何正確使用它。
到目前爲止,我正在使用一個1010 ... 10的序列,然後去做它。做到這一點上面會得到我1010.現在我需要找出我是否返回1或0.
說我們正在談論32位整數。我假設你想知道是否設置了任何奇數位(1)。
要做到這一點,我們創建一個看起來像這樣的整數:
10101010101010101010101010101010
現在,如果我們AND(&
)本,所有偶數位都過濾掉。現在,如果數字不爲零,則設置一個或多個奇數位。在C:
#include <stdint.h>
int hasodd(uint32_t x) {
// 0xAAAAAAAA = 10101010101010101010101010101010
// double negation to turn x>0 into 1 and leave 0 alone
return !!(x & 0xAAAAAAAA);
}
如果你的意思是你應該返回是否設置第N位,這是有效的。它右移一個1
到正確的位置,以過濾掉所有不相關的位:
#include <stdint.h>
int nthbitset(uint32_t x, int n) {
return x & (1 << n);
}
我模糊你的問題—的意圖,它看起來像功課。根據您的實際需求是什麼(比如是在問題的標題或正文說的),這些人會在幾乎任何C
實施工作:
int hasoddbitset (int v)
{
return (v & 0xaaaaaaaa) != 0; // for 32 bit ints
}
int isbitset (int val, int bitnum)
{
return (val & (1 << bitnum)) != 0;
}
這是功課?您將需要使用按位和(&&)運算符。你甚至可以使用按位或('|'),但是'&'在這種情況下更方便。 – Marlon