(0028,0103) Pixel Representation
像素值的数据表示形式
Enumerated Values:
0000H
unsigned integer. 无符号整数,直接保存像素值本身
0001H
2’s complement. 二补数,保存的是像素值的二补数,其实就是有符号整数,此时像素值可正可负
二补数
在二进制的世界里,正负数统一以补码的形式表示,编程时对应的数据类型是signed int、signed short等等,比如我们将4字节读取至signed int的变量里,直接就可以得到十进制数(其实十进制、十六进制本质上都是一串0、1的二进制数据)
二进制和十进制之间的转换过程如下:
转 https://www.cnblogs.com/sleepy/archive/2011/07/10/2102528.html
方法1:
10進制轉2進制:
<1>直接將10進制轉為2進制,正負號省略。
<2>如果數目少於X bits,在左邊補0直到X bits。
<3>如果是正號,不需要其他動作。
如果是負號,使用1補數:將0變1,1變0;1補數加1,形成2補數。
例(1):將+6以16bit儲存,使用2補數。
+6 => 110 => 0000000000000110
例(2):將-125以16bit儲存,使用2補數。
-125 => 1111101 => 0000000001111101
=> 1111111110000010 => 1111111110000011
2進制轉10進制:
<1>如果最左邊的bit是0(正數)。
1-1…將數字由二進制轉為十進制。
1-2…在數字前加+號。
例:將0000000000000110轉為十進制(使用2補數)
0000000000000110 => 6 => +6
<2>如果最左邊的bit是1 (負數)。
2-1…2補數減1,變為1補數。
2-2…將所有的0變1;1變0。
2-3…將數字由2進制轉為10進制。
2-4…在數字前加-號。
例:將1111111110000100轉為十進制(使用2補數)
1111111110000011 => 1111111110000010
=> 0000000001111101 => 125 => -125
方法2:
10進制轉2進制:
<1>將數字改為2進制;正負號省略。
<2>如果數目少於X bits,在左邊補0直到X bits。
<3>如果是正號,不需要其他動作。
如果是負號,維持最右邊的0直到第一個1(包含)不變,其餘的皆變換。
(0變1,1變0)
例(1):將+6以16bit儲存,使用2補數
+6 => 110 => 0000000000000110
例(2):將-125以16bit儲存,使用2補數
-125 => 1111100 => 0000000001111100 => 1111111110000100
2進制轉10進制:
<1>如果最左邊的bit是0 (正數)。
1-1…將數字由2進制轉為10進制。
1-2…在數字前加+號。
例:將0000000000000110轉為10進制(使用2補數)
0000000000000110 => 6 => +6
<2>如果最左邊的bit是1 (負數)。
2-1…維持最右邊的bits不變直到第一個1(包含),其餘的皆變換。
(0變1,1變0)。
2-2…將數字由2進制轉為10進制。
2-3…在數字前加-號。
例1111111110000011轉為10進制(使用2補數)
1111111110000010 => 0000000001111101 => 125 => -125
二者之間的差異
10進制轉2進制:
方法1需要先轉換到1補數,再用1補數+1轉為2補數,使用上較為簡單,但計算速度比較慢。
方法2就直接轉換成2補數,在使用上比較容易出錯,不過計算速度會比較快。
2進制轉10進制:
方法1須先使-1變為1補數,然後才能轉換成10進制,計算較為簡單,計算速度緩慢。
方法2可以直接轉換,比較容易出錯,但計算速度較快。