计算机基础【字节序,内存,补码】
文章目录
【注意】最后更新于 October 25, 2022,文中内容可能已过时,请谨慎使用。
计算机基础【字节序,内存,补码】
http://c.biancheng.net/view/3299.html
数据的存储
我们的程序和数据都是存储在内存中的,存储的区域是线性的。
数据存储的单元是一个二进制位【bit 0、1】,最小的存储单位是1 字节【byte】 1byte = 8 bit
内存的地址是从0开始的,然后自增排序,最后一个地址为内存的总字节数 -1,这种结构好像程序里的数组,所以内存的读写任何一个数据的速度是一样的。通常以16进制表现,如 0x0,0x1。
大的二进制数读起来很麻烦,因此使用十六进制表示更简洁,1个16进制数字可以代替4个二进制数字,所以2个16进制数就可以表示一个字节,也就是8位二进制数。
个人理解:补码
补码就是相反数,负数的相反数,这个相反数跟负数的和是0,也就是这个负数的加法逆元。所以这样就可以使用一个加法运算器计算减法了,不用再设计减法计算器了。3 - 4 = 3 + (-4),-4就是减数4的加法逆元。
然而正数补码还是正数,相当于只处理了负数,把负数变成了他的相反数的加法逆元
什么是补码,反码,原码,怎么计算
- 原码
补码是为了将减法转换为加法,简化计算机运算器
反码是为了计算负数的补码
为什么负数要用补码表示,计算机是怎么存储小数的
数据在内存里是以什么形式存储
数据在内存中以补码方式存储
首先我们看【整型】数据在计算机中的存储方式。将十进制转为二进制,除2取余法。
以【int】类型的数字为例子,【int】类型是4字节(32bit)(一般机器)。其中最高位是作为【符号标志位】,正数的符号位是 0,负数的符号位是 1,剩余的 32 bit 表示二进制数据。
例如 【int】类型整数 1——4字节,32位。
1 二进制为 :
0 000 0000 0000 0000 0000 0000 0000 0001
而负数在计算机中是以【补码】表示的,所谓补码就是把正数的二进制全部取反再加 1,比如 -1 的二进制就是把数字 1 的二进制取反后再加 1。
-1 二进制为 :
1 111 1111 1111 1111 1111 1111 1111 1111
为什么这么存储
在回答这个问题之前,我们先假设不用补码来表示负数,而是把最高位的符号位变为 1 表示负数。
如果采用这种方式表示负数的话,试着计算一下 -2+1 的运算过程。
正确的结果应该是 -1,但是最后计算的结果却是 -3。所以这种负数的表示不能用常规的加法来计算了,就需要特殊处理,先判断数字是否为负数,如果是负数就要把加法操作变成减法操作才可以。
回到为什么要用补码的问题,如果负数不是使用补码的方式表示,则在做基本加减法运算的时候,还需要多一步操作来判断是否为负数,如果是负数,还要把加法反转成减法,或者把减法反转程加法,为了性能考虑,应该要尽量简化这个运算过程。
而用了补码的方式,对于负数的加减法操作实际上和正数的加减法操作一样,如下