MathcotさんのHomePageです


2の補数変換と加減算とオーバーフロー

著者:Mathcot

初版:2007.9.17

LastUpdate:2007.9.17


2進数

符号なし2進数
 
正の整数を表すのに使用

8ビットの2進数

符号なし2進数
10進変換
10進数
0000 0000
0000 0001
0000 0010
0000 0011
0000 0100
0000 0101
0000 0110
0000 0111
0000 1000
0000 1001
0000 1010
0000 1011
0000 1100
0000 1101
0000 1110
0000 1111
0001 0000

0010 0000
0100 0000
1000 0000

1100 0000
1110 0000
1111 0000
1111 1000
1111 1100
1111 1101
1111 1110
1111 1111
0
1
1*2
1*2+1
1*2^2=1*4
1*2^2+0*2^1+1=1*4+1
1*2^2+1*2^1=1*4+2
1*2^2+1*2^1+1=1*4+1*2+1
1*2^3=1*8
1*2^3+1=1*8+1
1*2^3+1*2^1=1*8+1*2
1*2^3+1*2^1+1=1*8+1*2+1
1*2^3+1*2^2=1*8+1*4
1*2^3+1*2^2+1=1*8+1*4+1
1*2^3+1*2^2+1*2^1=1*8+1*4+1*2
1*2^3+1*2^2+1*2^1+1=1*8+1*4+1*2+1
1*2^4

1*2^5
1*2^6
1*2^7

1*2^7+1*2^6
1*2^7+1*2^6+1*2^5
1*2^7+1*2^6+1*2^5+1*2^4
1*2^7+1*2^6+1*2^5+1*2^4+1*2^3
1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2
1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1
1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2
1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2+1
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

32
64
128

192
224
240
248
252
253
254
255

16ビットの2進数
 
符号なし2進数
16進数
10進変換
10進数
0000 0000 0000 0000
0000 0001 0000 0000
0000 0010 0000 0000
0000 0100 0000 0000
0000 1000 0000 0000
0001 0000 0000 0000
0010 0000 0000 0000
0100 0000 0000 0000
1000 0000 0000 0000
1111 1111 1111 1111
0000H
0100H
0200H
0400H
0800H
1000H
2000H
4000H
8000H
FFFFH
0
1*2^8=1*256
1*2^9=1*512
1*2^10=1*1024
1*2^11=1*2048
1*2^12=1*4096
1*2^13=1*8192
1*2^14=1*16384
1*2^15=1*32768
1*2^16=65536-1
0
256
512
1024
2048
4096
8192
16384
32768
65535


符号付2進数(2の補数法)

2の補数法における2進数

8ビット2進数

符号付2進数
10進変換
10進数
1000 0000
1000 0001

1111 1101
1111 1110
1111 1111
0000 0000
0000 0001
0000 0010
0000 0011

0111 1110
0111 1111
-{(0111 1111)+1}=-(1000 0000)=-1*2^7
-{(0111 1110)+1}=-(0111 1111)=-(128-1)

-{(0000 0010)+1}=-3
-{(0000 0001)+1}=-2
-{(0000 0000)+1}=-(0000 0001)=-1
0
1
2
2+1

(1000 0000)-2=2^7-2=126
(1000 0000)-1=2^7-1=127
-128
-127

-3
-2
-1
0
1
2
3

126
127

16ビット2進数

符号付2進数
16進表現
10進数変換
10進数
1000 0000 0000 0000
1000 0000 0000 0001

1111 1111 1111 1110
1111 1111 1111 1111
0000 0000 0000 0000
0000 0000 0000 0001
0000 0000 0000 0010

0111 1111 1111 1110
0111 1111 1111 1111
8000H
8001H

FFFEH
FFFFH
0000H
0001H
0002H

7FFEH
7FFFH
-(1000 0000 0000 0000)=-2^15
-2^15+1

-{(0000 0000 0000 0001)+1}=-2
-{(0000 0000 0000 0000)+1}=-1
0
1
2

2^15-2
2^15-1
-32768
-32767

-2
-1
0
1
2

32766
32767



2の補数法による加減算

加算
2の補数法積み算
対応する10進積み算
(0000 0101)+
(0001 0110)=
(0001 1011)

(0001 0111 0001 0110)+
(0010 1110 0101 1011)=
(0100 0101 0111 0001)
5+
22=
27

5910+
11867=
17777


減算
2の補数法積み算
対応する10進積み算
(0010 1010)-
(0001 0110)=
(0010 1010)+
(1110 1010)=
(0001 0100)

(0001 1100)-
(0010 1011)=
(0001 1100)+
(1101 0101)=
(1111 0001)

(1110 1101)-
(0000 0110)=
(1110 1101)+
(1111 1010)=
(1110 0111)

(1111 0101)-
(1101 0011)=
(1111 0101)+
(0010 1101)=
(0010 0010)
42-
22=
20



28-
43=
-15



(-19)-
6=
-25



(-11)-
(-45)=
(-11)+
45=
34


オーバーフロー
(正の数)+(正の数)=(負の数)となるケース
(正の数)−(負の数)=(負の数)となるケース
2の補数法積み算
対応する10進積み算
(0111 0110)+
(0101 1100)=
(1101 0010)= -(0010 1110)= -46
118+
92=
210>128


アンダーフロー
(負の数)+(負の数)=(正の数)となるケース
(負の数)−(正の数)=(正の数)となるケース
2の補数法積み算
対応する10進積み算
(1010 1101)+
(1001 1001)=
(0100 0110)=70
(-83)+
(-103)=
-186<-128




Copyright(C) 2007 Mathcot.  All rights resrved.

inserted by FC2 system