Part1:原码,反码,补码 有符号数? 符号位 数值位 整型
那么数据是按照什么规则存放在计算机中的呢?先了解一下,原码,反码,补码。
按照定义是有符号的负数整型原码反码补码才不相同,无符号的和正数三者相同。
第一位是符号位,都是用0表示正,1表示负。而数值位三者皆不相同
Part2:-10 整数 补码 为什么 加法器 加减统一
我们举一个例子int:-10,我们知道一个整数占据4个字节
00000000 00000000 00000000 00000000;空:一般情况不为0
10000000 00000000 00000000 00001010;原码
11111111 11111111 11111111 11110101;反码
11111111 11111111 11111111 11110110;补码
ff ff ff f6;十六进制表示
在计算机中,整型数据是用补码的十六进制来表示的
为什么要这样做?
这就和计算机的结构有关系了,按照我之前的想法,用信号来表示数字的形式,这些数字终究是要拿来使用的,数字之间的基本运算法则,加减运算又是怎样实现的,用我们来想很简单1+1,等于2,在计算机中又是如何加减呢?
加法,在学习计算机组成原理之前,就先知道加法是将两个位置上的信号相加,用一个元件,当二则都为1是则变为0,同时后一位变为1(0)或则0(1)。减法呢1变成0,0变成1吗?这和加法是一样的啊?要如何分辨呢?在那个年代,原码反码补码还没有出现的时候,为了解决这个问题,有人提出了原码反码补码的概念,一堆101010中探究着,现在看来似乎很和合理,知道有这个规则,有点像柏林墙了。补码的存在使得减法可以做加法运算。
Part3:
大小端 内存块 低地址 模式 方式 字节顺序
我们在开辟空间的时候,将开辟的那块空间称之为内存块,按照编号,是有着高地址端和低地址端的,同样数据0x11223344,0x高位…地位。
我们以字节为单位将它放入内存块中,很显然有着多种排序方式,使用最多的两种方式为高地址放低位,低地址放高位和高地址放高位,低地址放低位,两种方式,前者被称为大端模式,后者被称为小端模式。因为其是按照字节来放入的,也就有了字节顺序这个名词。
Part4:
char %d 整型提升 %u
之前有说到char类型可以到整型里去,但char只占一个字节,当一个整型数据要放到char中时,一样要按32位先转换为补码,只不过最后放入的只有低位的一个字节。当char要以%d输出时,要先进行整型提升,如果首位是1,则进行补1到32位,若是0则补0(只有负整型补的是1,因为它原码反码补码不相同)
%u是无符号整型,在补码转换前进行判断(整型提升之后)
Part5:
char 范围 补码 有无符号 补1000 0000 圆圈+1变号 128
char类型分为有符号和无符号,在内存中也是以补码的形式存放、
有符号的范围是·-128—>127:01111111(127)+1=10000000(-128)
无符号的范围是0à255:00000000(0)à11111111(255)
我们知道在内存中的补码转换回去需要减一,但有符号的·10000000在这里自动会转换会-128。且由于补码的原因,在这里127+1=-128。