SQL Server的decimal和numeric数据类型 有一种新的压缩存储格式 vardecimal。放在可变长存储区域中。
vardecimal存储格式由三个部分
符号位(1位),指数(7位)和 尾数(1-19位)
sign (1 bit), exponent (7 bits), and mantissa (1–19 bytes).
值的计算方法是
( 符号 )尾数 * 10 的指数次幂
(sign) mantissa * 10exponent
也就是说第一字节是标记,后面的就是数字了。
Sign bit: 1代表是正数,0代表是负数
Exponent:范围是从- 38到37. 最高位是1其他六位为0代表0,也就是二进制1000000十进制64.
65是1 63是-1 66是2 62是-2
Mantissa: 尾数存储的是原本数字的整数值,小数点默认在数的最高位后面。 尾数是10位为一块(一个字节是8位),一块代表3个数字,一个decimal类型数字有多块组成。
Mantissa: 尾数存储的是原本数字的整数值,小数点默认在数的最高位后面。 尾数是10位为一块(一个字节是8位),一块代表3个数字,一个decimal类型数字有多块组成。
如果不够10位用0补齐。
比如 1存储的时候是0XC019
比如 1存储的时候是0XC019
C0的二进制是11000000,最高位1代表这是个正数,后7为是64代表指数为0.
19 的二进制是00011001,补两位才够十位 ,补位后是 1100100,十进制是100,由于小数点默认在第高位后面,所以这个值是1.00,通过值的计算方法
尾数 * 10 的指数次幂。得1.
http://msdn.microsoft.com/en-us/library/bb508963.aspx