原因
cpu本质就是个电子器件,它有很多很多引脚,每个引脚只有直流电压0v或5v两个状态,也就是二进制中的0和1,当多个引脚组合起来,就可以传递不同的信号了。
计算机处理信息单位
- 计算机处理信息最小单位是位,就相当于二进制中的位,英文缩写bit
- 计算机处理信息基本单位是8位,也称为1个字节(byte),故8位二进制被称为1个字节,cpu每次读写都是以字节为基本单位。
移位运算和乘除运算的关系
- 移位运算指的是将二进制数值的各数位进行左右移动的运算,移位有左移(向高位方向,运算符 << )和右移(向低位方向,运算符 >> )两种。
- 无论程序中使用的是几进制,计算机内部都会将其转换成二进制数来处理,因此都能进行移位操作。
- 左移运算低位进行补0,右移运算要根据数值的正负来决定是否补0。
- 移位运算也可以用来代替乘除法运算,二进制数左移后就会变成原来的2n倍,右移后就会变成原来的1/2n,其中n为移动的位数。
补数
- 右移运算用来填充高位的数值有0和1两种形式,区分什么时候补0什么时候补1,就需要知道二进制是如何表示负数的。
- 二进制表示负数时,一般会把高位作为符号来使用,因此最高位成为符号位,符号位是0时表示正数,符号位是1时表示负数。表示负数就要使用“二进制的补数”。
- 补数,就是将正数的二进制各位数值全部取反,然后再加1。检验补数的正确性,只需记住一个法则:正数与其补数之和等于0。
- 对于减法运算,cpu会将其转化成加法运算,如1-2 —> 1+(-2) = -1,这里的运算结果为负数时,在计算机中也是以补数表示的。
- 将二进制的值表示图形模式而非数值时,移位后只需在最高位补0,称为逻辑右移,如:霓虹灯右移的效果;将二进制数带符号进行运算时,移位后在最高位填充移位前符号位的值(0或1),称为算术右移。
- 符号扩充,以8位二进制数为例,在保持值不变的前提下将其转换成16位和32位二进制数,那么高位应该补0还是1呢。这里记住一点:不管是正数还是负数,都只需用符号位的值(0或1)填充高位即可。
逻辑运算
- 计算机能处理的运算大体分为算术运算和逻辑运算,算术运算指加减乘除四则运算,逻辑运算指对二进制数各数字位的0或1分别进行处理的运算,包括逻辑非|与|或|异或四种
- 逻辑非指按位取反操作,逻辑与指:同为1则为1,否则为0,逻辑或指:至少有一个为1就为1否则为0,逻辑异或指:两个不相同就为1否则为0。
- 逻辑非是所有位的取反操作,逻辑与是将一部分变为0(复位到0)的操作,逻辑或是将一部分变为1(复位到1)的操作,逻辑异或是将一部分进行取反(相同取0,不同取1)的操作。
用二进制表示小数
小数点前面的部分位权从0次幂开始递增,小数点后面部分的位权从-1次幂开始递增,这一规律也同样适用于十进制和十六进制。
计算机出错的原因
有一些十进制数的小数无法转换成二进制数,二进制数小数点后4位表示的数值范围为0.0000 ~ 0.1111,因此,只能表示0.5、0.25、0.125、0.0625这四个位权组合而成的小数,不能用这些位权组合成的数就无法用二进制表示了,比如0.1就无法用二进制表示了,这就是计算机出错的原因。
浮点数
1.像1011.0011这样带小数点的表现形式只是纸面上的二进制数表现形式,在计算机内部是无法使用的。
2.数据类型中,双精度浮点数(double)用64位、单精度浮点数(float)用32位来表示全体小数。
3.浮点数是指用符号、位数、基数和指数来表示的小数。二进制数,基数是2。
符号部分指使用一个数据位表示数值的符号,1表示负,0表示正或0,数值的大小用尾数部分和指数部分表示。尾数部分用的是“将小数点前面的值固定为1的正则表达式”,而指数部分则是“EXCESS系统表现”。