[過去ログ] スレ立てるまでもない質問はここで 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理解できました!ありがとうございます!
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.333s*