-167を補数表現するためには、8ビットでは足りません。
符号付き8ビット整数の表現範囲は -128~127 になります。
このため-167の補数を表現するためには9ビット以上の範囲が必要となります。
また、pythonのbin()関数は負の整数を-(絶対値)
と表現するため、補数処理を観察するのには向いていません。
python
1x = -167
2print(" x :"+format(x))
3print(" bin(x):"+bin(x))
4
5
6print(" x & 0xff :"+format(x & 0xff,"016b"))
7print("89 & 0xff :"+format(89 & 0xff,"016b"))
8print(" x & 0xffff :"+format(x & 0xffff,"016b"))
9
10print(" x | 0xffff :"+format((x | 0xffff) ,"016b"))
11print(" x | 0xffff :"+format((x | 0xffff) & 0xffff,"016b"))
12
13print(" ~x :"+format( ~x))
14print(" bin(~x):"+bin(~x))
15print("~x & 0xffff :"+format(~x & 0xffff,"016b"))
16print(" x & 0xffff :"+format(x & 0xffff,"016b"))
17
18#出力#
19# x :-167 #
20# bin(x):-0b10100111 #
21# x & 0xff :0000000001011001 # 0xff=255=0b11111111との&
22#89 & 0xff :0000000001011001 # 89と一致
23# x & 0xffff :1111111101011001 # 実際は上位ビットに1が詰められている
24# x | 0xffff :-000000000000001 # "|"した場合 1|0は1のため、上位ビットに1が詰められている=マイナスになる
25# x | 0xffff :1111111111111111 # 下位16ビットを切り出した場合
26# ~x :166 # ビット反転"~"を使った場合。2の補数となる。
27# bin(~x):0b10100110 # bin(x)と比べてもよくわからない
28#~x & 0xffff :0000000010100110 # 下位16ビットを表示して比較すると反転しているのがわかる。
29# x & 0xffff :1111111101011001 #
30
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。