我正在嘗試查找位串的奇偶校驗位,以便它返回1,如果x有奇數個0。
我只能用基本的位運算和我有什麼迄今爲止通過大多數測試,但我想知道兩兩件事:奇偶位數的位奇偶校驗碼
爲什麼χ^(X +〜1)工作?我偶然發現了這一點,但是如果有奇數位和其他的偶數,它似乎會給你1。像7^6 = 1,因爲7 = 0b0111
這是解決這個問題的正確方向嗎?我假設我的問題來自第一次操作,特別是(x +〜1),因爲它會溢出某些2的補碼數。由於
代碼:
int bitParity(int x) {
int first = x^(x + ~1);
int second = first^1; // if first XOR gave 1 you'll return 0 here
int result = !!second;
return result;
}
你從哪裏找到該算法? – rnunes
不使用'int',會有溢出,這是未定義的行爲。使用'unsigned'和'1u'來代替,這裏的環繞是明確的。 –
此算法不起作用。它的0至255 –