二进制数据表示

二进制表示

    在计算机中表示二进制数字有定点数和浮点数之分。而定点数中又分为有符号和无符号,其中n位二进制定点数,无符号的表示范围是[0, 2^n - 1], 而有符号的表示范围(一般用补码)为 [-2^(n-1) , 2^(n-1) - 1]. 
    其中有符号定点数的表示可以有原码、反码、补码三种方式,其中原码首位为符号位,0为正数,1为负数;后n-1位为数字位,表示范围为[- 2^(n-1) + 1, 2^(n-1) - 1], 虽然n位二进制有2^n 种取值情况,但是有符号定点数的取值范围只有 2^n - 1个值,这是因为 10000000 和 00000000 在原码表示的时候,取值都是0. 
    反码是在原码的基础上,首位表示符号位,若符号位正,则反码和原码相同;若符号为负,则保留符号位为1不变,将原码后面的n-1取反。 
    补码在反码的基础上,首位表示符号位,若符号为正,则保持不变(*即正数的原码,反码,补码表示是一样的);若符号为负,则将反码 加1,如果加1进位的时候进到符号位导致符号位发生改变,仍然照进不误 
因此,0的原码为00000000或者10000000,但是它的补码只为 00000000, 此时会发现 补码10000000 找不原码,规定补码10000000的原码为-128(即 -2^(n-1)) 
于是,有符号定点数的补码表示范围为[ - 2^(n-1), 2^(n-1) - 1]。

posted @ 2016-10-26 11:33  农民伯伯-Coding  阅读(609)  评论(0编辑  收藏  举报