计算机基础【字节序,内存,补码】

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的加法逆元。

然而正数补码还是正数,相当于只处理了负数,把负数变成了他的相反数的加法逆元

什么是补码,反码,原码,怎么计算

  1. 原码

补码是为了将减法转换为加法,简化计算机运算器

反码是为了计算负数的补码

为什么负数要用补码表示,计算机是怎么存储小数的

数据在内存里是以什么形式存储

数据在内存中以补码方式存储

首先我们看【整型】数据在计算机中的存储方式。将十进制转为二进制,除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。所以这种负数的表示不能用常规的加法来计算了,就需要特殊处理,先判断数字是否为负数,如果是负数就要把加法操作变成减法操作才可以。

回到为什么要用补码的问题,如果负数不是使用补码的方式表示,则在做基本加减法运算的时候,还需要多一步操作来判断是否为负数,如果是负数,还要把加法反转成减法,或者把减法反转程加法,为了性能考虑,应该要尽量简化这个运算过程。

而用了补码的方式,对于负数的加减法操作实际上和正数的加减法操作一样,如下

为什么要有原码,反码,补码

字节序是什么,有什么作用,主机字节序跟网络字节序的区别

怎么看进程在内存中的数据