作者: davi
日時: 2007/11/03(23:43)
Zazelさん Bruce.さん  <  こん??は でび です

On Thu, 01 Nov 2007 09:36:59 +0900 (JST)
Zazel <zazel.ts@...> wrote:

> 二進数で補数は ~00100100 == 11011011

復習です。添削おねがいします、

以下、理解したつもりの分。


>set /a x=1+1
2
加算。

>set /a x=~1
-2
補数(ビット反転。単項演算)

dec bin
1  0000000000000001
-2 1111111111111110

>set /a x=~0
-1 

補数(ビット反転。単項演算)

dec bin
 0 0000000000000000
-1 1111111111111111

>set /a x=~1
-2

補数(ビット反転。単項演算)

dec bin
1  0000000000000001
-2 1111111111111110

>set /a x=!1
0

論理否定(こっちも単項演算。この例の場合、ビット反転と混同しそうで要注意かも)

>set /a x=!2
0

論理否定(単項演算。0以外のものを論理否定した場合、暗黙に1扱いな点に注意。)

>set /a x=!0
1

論理否定(単項演算。こっちも、ビット反転と混同しそうで要注意かも)

>set /a x=1<<2
1<< の使い方が誤っています。

論理シフト。
ビットを左右にずらす(シフト)。
→乗算・除算ができてしまうらしい。

>set /a x="1<<2"
4

dec bin
1  0000000000000001
2  0000000000000010
4  0000000000000100

???解説きぼん。
2とは「2桁上げる(ずらす)」という理解で良い?
或いは、2進の10を掛ける、という理解?
考えるときの軸足をどちらに置くのが良いのか、
イメージしづらいです。

>set /a x="192>>3"
24

192 11000000
3   00000011
24  00011000

0を3個減らして、上の桁を0で埋めたように思えますが、
その理解で良い?
でもそうすると、192は2進で理解して、「0を3個減らす」
の部分では10進で理解して、24という結果は2進数の投影
に過ぎないことになって、3の部分だけ11を使わないのは、
なんだか考え方が変なのかもしれない、という不安が…。

---snip----

>set /a x="64^32"
96

ビット単位の排他OR演算。単項演算ではない。

dec bin
64 1000000
32 0100000
96 1100000

でび  http://homepage1.nifty.com/davi/