[過去ログ] スレ立てるまでもない質問はここで 165匹目 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
973: デフォルトの名無しさん (ワッチョイ c7e3-Rf8y) [sage] 2024/12/11(水) 15:06:45.43 ID:j0qahdVT0(1/3) AAS
popCountが2進数でみたときに立っている1のビットの個数を表す関数として
(popCount (xor x (x-1)))-1
というコードが
最右の1がたっているビットの位置を返す(8なら3 4なら2 3や5や1なら0
というものみたいなのですがなぜこうなるのか解説していただけませんか
xor x (x-1)の部分だけでも良いので(C言語だとx^(x-1))お願いします
975: デフォルトの名無しさん (ワッチョイ c7e3-Rf8y) [sage] 2024/12/11(水) 15:27:46.03 ID:j0qahdVT0(2/3) AAS
入力です。参考までにC++コードでかきました
#include <bits/stdc++.h>
using namespace std;

int popCount(int x){ return __builtin_popcount(x);}

int leastBit(int x){
return (popCount(x^(x-1))-1);
}
int main() {
for(int i=1;i<10;++i){
cout << leastBit(i) << endl;
}
}
977: 973 (ワッチョイ c7e3-Rf8y) [sage] 2024/12/11(水) 15:41:09.56 ID:j0qahdVT0(3/3) AAS
>>976
976(1): デフォルトの名無しさん (ワッチョイ 8780-HKGL) [sage] 2024/12/11(水) 15:34:32.26 ID:TMP5yUNc0(2/2) AAS
すまん、974は読み違えしてた。
X-1は最も低いオンビットとそれより下位のビットを反転させるので、XOR取ると反転したビットの数が取れる
右端1個目を0とするから1を引く
各数値の計算途中のビット列を書き出してみるとわかると思う
理解できました!ありがとうございます!
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.333s*