vardecimal 存储格式

   SQL Server的decimal和numeric数据类型 有一种新的压缩存储格式 vardecimal。放在可变长存储区域中。
    vardecimal存储格式由三个部分 

        sign (1 bit), exponent (7 bits), and mantissa (1–19 bytes).

        符号位(1位),指数(7位)和 尾数(1-19位)

    值的计算方法是 

                                (sign) mantissa * 10exponent

                                ( 符号 )尾数 * 10 的指数次幂


    也就是说第一字节是标记,后面的就是数字了。
     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类型数字有多块组成。
                        如果不够10位用0补齐。
比如 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

你可能感兴趣的:(vardecimal 存储格式)