计算机中的数据可以分为:数值数据、非数值数据;
数值数据可以分为:有符号数据、无符号数据;
非数值数据包含:文字、视频、图像…
以8位(一个字节)的数据为例:
有符号数据的表示范围为:-(2的n-1次方)-1到2的n-1次方;
无符号数据的表示范围为0到2的n-1次方
无符号数据与原码、反码、补码的关系:
无符号数全是正数,原码就是该正整数的二进制表示方法;
无符号整数的原码=反码=补码;
有符号数与原码、反码、补码的关系:
(正整数的原码=反码=补码)
原码:
有符号数据中的正整数的原码就是该数的二进制数,如:2用八位二进制
表示为00000010
有符号数据中的负整数的原码就是正整数的原码的最高位(符号位)为1,
其他位不变,如-2的原码用八位来表示为10000010
反码:
有符号负整数的反码就是在原码的基础上,符号位(最高位)不变,保
持为1,其余位按位取反(也就是原来为1的位变成0,原来位0的位变为1),
-2的反码就是11111101
补码:
有符号数的补码就是在原码的基础上,符号位不变,其余位按位取反,
最后在最低位加一,-2的补码就是11111110
为什么会有原码、反码、补码呢?
计算机中的数都是用补码的形式存储的;
也就是正数在计算机中的存储方式就是补码(正数的原码=反码=补码);
负数在计算机中的存储方式也是补码(负数的原码、反码、补码规则在上面);
私以为原码、反码毫无卵用,有用的只是补码,因为负数的二进制并不那么记,也不好推算,所以制定了原码、反码的概念,方便从正数的二进制数推算除负数在计算机中的二进制数,为什么这样说呢?下面我以一张图解释。
这张图依然以八位二进制来解释
右边那一半就是正数的二进制表示,也是其原码、反码、补码;
左边那一半就是负数的补码形式,有没有发现左边的数就是右边的数按位取反;-1的补码就是0的二进制取反,-128的补码就是127的二进制取反;
而且127的二进制+1就是-127的补码,很神奇对不对,好像经历了一个轮回。计算机中只有一个加法运算器,没有减法运算器,也没有乘除法运算器。
计算机中是如何实现加减法的?
因为计算机中的加减法都是正负数的补码相加,也就是计算机中根本不存在减法,本质上只有加法,乘除法也是根据加法操作特殊处理来的,至于怎么来的,我还没去搞清楚,嘻嘻嘻;
现在有没有明白为什么我说我觉得原码、补码毫无卵用;精华都在那张图上面,没看懂多看几遍;
来源:CSDN
作者:handsome boy!
链接:https://blog.csdn.net/qq_42861208/article/details/104191914