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/