数据表示:原码、反码、补码和移码与定点数和浮点数

前置知识

各种数值在计算机中以二进制计数制,称为机器数。机器数有无符号数和带符号数之分,无符号数无符号位,代表正数。带符号数的最高位表示正负,其余位表示数值。带符号的机器数具有原码、反码、补码和移码等不同的编码方式。

原码、反码、补码和移码

对于纯整数,各编码方式数值如下:

原码数值 正负数 反码数值 补码数值 移码数值
X + X X 2n1+X
2n1+X - 2n1+X 2n+X 2n1+X

可以看出,对于正整数,其原码、反码和补码是相同的。
而对于负整数,我们需要从数值的绝对值(假设值为X)来入手计算。其原码可看作是X的最高位的0换成了10表示正数,1表示负数),反码可看作是X的按位取反,补码可看作是X的按位取反的末位加1(也即其反码的末位加1)
移码较为特殊,在偏移量为的情况下,数值的移码可看作是将其补码的符号位取反获得。

事实上,对于纯小数,以上规律仍然成立。

特别地:0的原码和反码形式有0 00000001 1111111两种,而其补码只有0 0000000([+0]补)00000000([-0]补)一种。

例题训练

[+45]原 = 0 0101101
[-45]原 = 1 0101101
[+45]反 = 0 0101101
[-45]反 = 1 1010010
[+45]补 = 0 0101101
[-45]补 = 1 1010011
[+45]移 = 1 0101101
[-45]移 = 0 1010011

posted @   Nhwite  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示