二进制 (小白进军程序员)

1.人为什么使用十进制?
人有10个手指头。
2.计算机为什么用二进制?
因为CPU的引脚是为了通电用的。有时候是高电频,有的是低电频。为了区分,就用0和1表示,0表示低点频。1表示高点频。
二进制就是冯2进1. 十进制就是冯10进1.
3.十进制和二进制表数的共通点就是基数(radix)
十进制的基数为10 二进制的基数为2
4.二进制和十进制的转换
口诀 基数 * 位次幂+
比如0101 转为十进制
0101 = 1 * 2的零次方 + 0* 2的一次方 + 1* 2的2次方 + 0 * 2的3次方 =5
所以0101转为十进制就是5
其余进制转为十进制都是如此。
比如五进制 43 转为十进制。
43 = 3 * 5的一次方 + 4* 5的1次方=23.

5.八进制
前面通常用加0 比如047

6.十六进制
0-9ABCDEF 通常用0X为前缀,表示十六进制

  1. 十进制转二进制 (除2求余数法)

二进制 (小白进军程序员)_第1张图片

8.二进制的正数和负数
原码:就是二进制码。比如十进制的7的原码就是00000111
反码:将原码中的0变为1,1变为0. 7的反码就是11111000.
补码:反码 + 1 7的补码就是:11111001
负数用补码表示。
正数用原码表示。
最高位如果是1表示负数。

十进制的负数转二进制,先求解对应正数的原码,然后最高位定为1,其余位取反然后加1

二进制负数转十进制,符号位不变,其余位取反然后加1,得到原码。
比如11000100转十进制
其余位取反 0111011
加1得到0111100 这是原码 即为60
负数就是-60 (这里可以用十进制的负数转二进制反验证)

8位二进制的范围:
既然说是范围,那肯定是要bai带符号位的了,最du高位分别zhi用0,1表示正负数,其余各位均为1,即为8位二进制原码表示的范围,即
但若是补码就不是这个范围了,应该是-128~+127,计算原理相同,只是数的表示方法不同,有兴趣自己可以计算一下。

结论:
8位二进制原码的bai表示范du围:-127~+127
8位二进制反码的表示zhi范围dao:-127~+127
8位二zhuan进制补码的表示范围:-128~+127
n位二进制原码和n位二进制反码:-2(n-1)-1~+2(n-1)-1;n位二进制补码:-2(n-1)~+2(n-1)-1。

9.为什么负数用补码表示?
原因一:为了让0的表述实现统一
00000000 这是0
它的反码11111111
它的补码:100000000 这是九位数了,溢出了,溢出忽略,所以补码为00000000
因为0没有正负数,所以补码要和原码一样。所以用补码表示负数。
原因二:减法可以当做加法运算
CPU没有减法器。所以用补码表示负数CPU就可以计算了。

10.二进制的逻辑运算
& 遇0则0 与运算
| 遇1就1 或运算
~ 1-0 0-1 取反
^ 相加不进位(相同为0,相异为1) 异或

补符号位 (将最右位干掉,高位正数左补0,负数左补1)右移
<< 补0 (最高位干掉,在最右位补0) 左移

无论高位是啥直接补0 无符号右移

11.移位运算与乘除运算的关系
对于右移,直观的理解为,对于正数来说,右1移相当于除以2(但效率比除法高);对于负数来说,没有直观的理解。
对于左移,直观的理解为,对于正数来说,左移相当于乘以2(但效率比乘法高);对于负数来说,没有直观的理解。

12.a=3 b=4 a和b交换。
方法一:用临时变量c
方法二:a=a^b b=a^b a=a^b

13.长整数和短整数的转换
比如01101101 转为十六位----00000000 01101101
比如11000110 这是负数转为十六位 ---- 11111111 11000110
短整数转长整数 数字大小不会变

长整数转短整数 是将高位砍掉,这样会数字会发生变化。

14单位:
bit 1位
byte 8位 CPU在设计的时候最低就是8位数,如果不够自动高位补0.
MB
GB
TB
15.LITTLE ENDIAN/BIG ENDIAN(小端/大端)
超过一个字节的数在内存中的存储顺序
地位在小地址-little endian
高位在小地址-big endian

你可能感兴趣的:(补码,cpu)