HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0808
ビットビット演算6未解決


ビット

リンク

2006/8/8(Tue) 10:56:01|NO.1859

ビット演算について質問なのですが、

2つの数字の先のほうのビットを、後のほうのビットが1の所を0にしたいのです。
たとえば、23と4なら、

10111   …23
00100   …4
-----
10011   …19

この場合はxorでできるのですが、

89と35
1011001  …89
0100011  …35
-------
1011000  …88

の場合はxorではできません。

どうすればやりたいことができるのでしょうか…



この記事に返信する


Mizki_F

リンク

2006/8/8(Tue) 11:30:20|NO.1860

まず最初に
> 2つの数字の先のほうのビットを、後のほうのビットが1の所を0にしたいのです。
これはXORではありません。
23と4の場合はたまたま答えが正しくなっただけです。
ビット演算を考えるときは、全ての組み合わせについて調べる必要があります。
この命題の場合は、後ろの値をビット反転してORを取ればできます(ホントはNORですが…)。



Mizki_F

リンク

2006/8/8(Tue) 12:46:14|NO.1862

あああ…ゴメンナサイ。
先程書いたのは間違えてました。
正解は「(A xor B) nand B」になるはずです。

詳しく調べないで書き込んじゃいました(^^;



ビット

リンク

2006/8/8(Tue) 21:54:19|NO.1887

ありがとうございます。
しかし、

mes (89 xor 35) and 35
のスクリプトでやってみると、
結果は88ではなく34でした…。



GENKI

リンク

2006/8/8(Tue) 22:19:06|NO.1888




Mizki_F

リンク

2006/8/8(Tue) 22:42:22|NO.1889

NANDなのでビット反転してからANDしてください。

(後で気付いたけど、括弧内はxorじゃなくてorでも大丈夫だった…orz)

a=89 : b=35 not_b=b^0xFFFFFFFF mes (a | b) & not_b

真偽表やベン図を書いてみると判りやすくなると思います。



Mizki_F

リンク

2006/8/9(Wed) 00:22:51|NO.1892

あああ…もっと単純に「A and B xor A」になるんですね…orz
昔勉強したはずなのにすっかり忘れてるなぁ…(´・ω・`)



ONION software Copyright 1997-2021(c) All rights reserved.