アプリ版:「スタンプのみでお礼する」機能のリリースについて

10進数からビットフラグの判定
例えば、
11011
というビットフラグが10進数「27」になっていたとして。

下から2桁めのビットフラグが「1」かどうか。
「27」を2進数に変換したり、割り算を繰り返すなどの方法以外で判定する方法はありますか?

質問者からの補足コメント

  • 言葉足らずでした。

    方法の有無ではなく、
    方法を教えてください。

      補足日時:2022/12/07 13:53
  • 桁が小さいと簡単というご回答頂いてましたが、
    実際は10進数で55万とか20ビット以上の中の16桁目を求める、といったことになります。
    質問する上で事情を簡略化し過ぎてしまいました。
    すみません。
    それを踏まえた上で、改めて回答いただけるとありがたいです。

    今の時点で頂いている回答について、確認してない状態での補足コメントしております。

      補足日時:2022/12/07 15:02

A 回答 (7件)

補足を得ても何を使えるかがよくわからないのですよね



累乗は使えるって想定なら割り算は1回だけど
x/2^17の余りが
2^16より大きければ16桁目は1
2^16より小さければ16桁目は0
    • good
    • 0
この回答へのお礼

求めていた回答はこういうもの、まさにコレです。
2進法の性質からも単純にこれで判定できるなと納得できました。

わかりにくい質問から汲み取って回答していただきありがとうございました。

お礼日時:2022/12/07 18:55

主さんがやりたいのは多分、


下のリンク先の「3. 整数値から(中略)復元」のところに書いてある
「 bit & (1<< i) 」だと思います。
(bit と「1を左に iビットシフトした数」
とのAND演算)
変数 bit も i も整数型で、「質問」のケースでは bit = 27、i=1(=2-1) と入力すると

27 & (1<< 1)
= 0x11011 AND 0x00010
= 0x00010(= 0x00010
→ 下から2ビット目は“1”)

「その結果が i 」になれば
「ビットフラグが“1”」と判断できます。

【参考】ビット全探索
https://drken1215.hatenablog.com/entry/2019/12/1 …
    • good
    • 0

そのビットとそのビットに対応する"1"で論理積をとるだけ



11011で下から2桁めなら00010でビット単位で論理積を取ればいい
    • good
    • 1

16進数に変換すればよいと思います。


関数電卓を使わず手で計算する際の変換方法は・・・

(1) 対象の値を余りが16未満(=15以下)になるまで割る
(2) (1)の商に余りを16進数表記にして加える

・・・という感じ。
例えば10進数の27なら27÷16で商は1で余りが11。
よって10+Bで答えは1B。
で、Bは2進数で1011だから2桁目が1だと。

そうか、そうか。16進数に変換した際の16進数表記での1桁目は(1)の余りだから、その値を見ればよいだけですね。はい。
ということで(1)の余りが・・・

2進数  16進数  10進数
0010  2     2
0011  3     3
0110  6     6
0111  7     7
1010  A     10
1011  B     11
1110  E     14
1111  F     15

・・・なら2ビット目がONだと。
そんな感じで。

参考まで。
    • good
    • 0

使っていい操作を決めておかないとどうにもならん. 例えば, 「下から 2ビット目」であれば


2 (または 4) とのビット積
の結果でわかるけど, 「ビット積」を使っていいかどうかは決まってない.
    • good
    • 0

5ビット程度なら全部憶えると言う方法もあります。


一般的手法なら1ビット右シフトする。
X ÷ 2 が偶数か奇数かで判定する。
    • good
    • 0

あります。

    • good
    • 0
この回答へのお礼

ありがとうございます。
その方法を教えてください。

お礼日時:2022/12/07 13:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!