作者: Bruce.
日時: 2007/11/04(00:30)
Bruce.です。

> 昔々、情報処理二種試験対策の問題集で、こういうの
> 見かけたような気もしますが…

でしょうね。
今の基本情報処理技術者レベルでも出てるんじゃないですかね。
もうすぐなくなるらしいシスアドだとどうだかわかりませんけど。


davi さんは書きました (2007/11/03 23:43):
> Zazelさん Bruce.さん  <  こん??は でび です
> 
> 以下、理解不能だった部分。補講を希望。
> 
>> set /a x="20&2"
> 0
> 
> ビット演算子 AND
> ???これ、調べたけど、概念がよくわからん。
> 例えばhttp://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Guide:Operators:Bitwise_Operators
> の説明とか。

and というのは1ビットのレベルまで落とし込むと結局こういうことです

1 and 1 → 1
1 and 0 → 0
0 and 1 → 0
0 and 0 → 0

話を戻して
>> set /a x="20&2"
> 0

で考えるとこうなります。

20(十進表記)を二進表記にする
→  1_0100  (16 + 4 = 20)

同様に2を二進表記にする
→ 0_0010 (桁数は上に合わせた)

並べます。
そして、上下の同じ桁のビットごとに先ほどの演算を適用します

  1_0100
  0_0010
--------
  0_0000

ということで、答えは0になるというわけです。

>> set /a x="8|4"
> 12
> 
> ???これ、調べたけど、概念がよくわからん。

or を and のときと同じような形で説明すると以下のようになります。

1 or 1 → 1
1 or 0 → 1
0 or 1 → 1
0 or 0 → 0

そして例にある数字を使って実際にやってみます。

8 → 1000
4 → 0100


   1000
   0100
--------
   1100

1100 を十進表記すると、2**3 + 2**2 でありそれはすなわち12というわけです。

> 更に、2進数でのマイナスの扱いがよくわかりません。
> 
>> set /a x=~-10
> 9
> 
> dec bin
> -10   1111111111110110
>   9   0000000000001001
> 
>> set /a x=~10
> -11
> 
> dec bin
>  10   0000000000001010
> -11   1111111111110101
> 
> 確かにビット反転なのは関数電卓で確認できましたが、
> よくよく2進数の表記を観察すると、マイナスを示す2進数
> って、異様に大きな数になって、変な感じを受けます。
> 
> とにかく上位バイトを全部1で埋めちゃえ、っていう法則なの
> でしょうか?

コンピュータにおける整数演算の場合、ほとんどの場合負の数は補数 (complement)
というものを使って表されます。この補数という概念を使うことによって、引算を
足算に化けさせることができます。n進数があったとき、補数にはnの補数と
n-1の補数の二つの補数があります。十進数であれば10の補数と9の補数です。
二進数であれば2の補数と1の補数です。通常コンピュータで使われるのはこのうちの
2の補数の方です。

とりあえずはWikipediaにある説明でも読んでみてください。
その上でわからないことがあれば別途お答えします。

補数 〜さんすう・数学のお勉強〜
http://www.hokuriku.ne.jp/fukiyo/math-obe/hosuu.htm

負数(2の補数表現)
http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/fusu.htm

補数 - Wikipedia
http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0

2の補数 - Wikipedia
http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0


Computer Arithmetic - Two's Complement and Negative Numbers
http://www.hal-pc.org/~clyndes/computer-arithmetic/twoscomplement.html

Signed number representations - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Signed_number_representations#Ones.27_complement


-- 
木村浩一
  I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?
  mail kbk [at] kt.rim.or.jp
        web  www.kt.rim.or.jp/~kbk/zakkicho/
             homepage3.nifty.com/farstar/