计算机进制知识整理
基数(radix)
进制其实就是基数,大于或等于基数时,向高位进1。10进制基数就是10,二进制基数就是2,八进制(8)、十六进制(16)。
计算机为何用二进制?
计算机原件二极管通电时只有高低电频, 分别表示1和0。
十进制转二进制方法
- 除2求余法。最后将余数倒着写各位余数,即为二进制。
- 2?的和。 64 + 32 + 16 + 2 = 01110010 = 114
背诵记忆2的10次方以内的数据
key | value | key | value | key | value |
---|---|---|---|---|---|
20 | 1 | 21 | 2 | 22 | 4 |
23 | 8 | 24 | 16 | 25 | 32 |
27 | 64 | 28 | 128 | 29 | 256 |
210 | 512 | 211 | 1024 | 211 | 2048 |
源码、补码和反码
- 原码:表示正数。
- 反码:原码取反,1变0,0变1。
- 补码:反码+1,正数的补码是本身,负数用补码表示。
带符号数和不带符号的数
- 带符号数。如果二级制的首位为1,则为负数。10110110,首位为1表示为负数,
- 不带符号的数。首位为0 ;(类mysql数据库中unsigned)
负数
负数用补码表示,10进制的负数转二进制,先求解对应正数,然后符号位定位为1,其余位取反+1。
十进制负数转二进制过程
- 先讲正数转为二进制。
- 将符号位定位为1.其余位取反+1
二进制负数转10进制
- 保持符号位不变
- 其余位数取反+1,得到原码。
为何负数用补码表示?
- 减法可以当做加法来运算。5-3=5+(-3) = 00000101 + (11111101) = 100000010 (高位溢出舍弃)= 00000010 = 2
- 0的表述实现统一。正0:00000000 负0:10000000 取反 11111111 再+1 得 100000000( 溢出的1被计算机舍弃后得)00000000,即正0和负0都为00000000。
逻辑运算符
- 与运算(&):遇 0 则 0
- 或运算(|):遇 1 则 1
- 取反(~):1变0,0变1
- 异或(^):不进位加,(相同为0,相异为1)
- 右移(>>):补符号位【正整数 除2】
- 左移(<<):补0【正整数 乘2】
- 无符号右移(>>>):补0
大端(big endian)与小端(little endian)
- 大端与小端指:超过一个字节的数在内存的存储顺序
- 低位在小地址----小端。大部分操作系统采用小端
- 高位在小地址----大端。网络序一般用大端