整型的存储
整型在内存中的存储都是以补码的形式进行存储的
原码、反码、补码
在计算机中数据可以分为有符号数和无符号数
数据的表示方法为:原码,反码和补码
- 原码:二进制序列(有符号数最高位为符号位)
反码:将原码的_符号位不变_,其他位依次取反
补码:反码+1(其中符号位要参与运算) - 无符号数:原码=反码=补码
有符号数:最高位代表符号位,正数“0”,负数:“1” - 有符号正数:原、反、补相同,最高位为0
- 有符号负数:要进行原、反、补的转换
数据的写入和读取
在定义变量时,首先是开辟对应的空间
写入数据
将数据转化为对应的二进制序列,然后写入对应的内存空间
读取数据
根据变量的类型,解释内存里面二进制是什么含义。
- 先看变量的类型(确定类型是否有符号位)
- 无符号数直接转成十进制数
- 有符号数,先看符号位,若为0,则直接转成十进制
- 若有符号,且符号位为1,按照原码转补码的方式进行转化
在读取时,二进制本身是不会发生变化的,但是经过类型的解释二进制代表的含义会发生相应的变化(这也就是变量类型的意义)
【首先给a开辟一个四字节的空间,将-10转化为二进制(1000 1010),将二进制序列以补码的形式(1111 0110)写入到已经开辟好的空间中;
在读取时,由于unsigned char 是无符号的,直接将1111 0110 转换为十进制为246 】
大小端
- 内存访问的基本单位是字节,每个字节都有对应的地址,地址也有大小之分;
- 数据按照字节为单位可以划分为若干个部分,其中每一部分对应的权值不同,会有权值的高低之分。
变量a的地址为0x 00 00 00 14,其中14为低权值位,00为高权值位;但是在内存中存储时将14放在了低地址处。
小端存储:数据的低权值位放在了低地址位
反之,位大端存储。
在写入和读取数据时都要考虑大小端的问题。