数制与码制

内存容量单位换算表
1.1 进位计数制
一般来说,如果数制只采用R个基本符号,则称为基R数制,编码符合逢R进位。以下,
是对R进制数N的按权展开多项式,n表示整数部分的位数,m表示小数部分的位数。
N=Dn−1Rn−1+Dn−2Rn−2+...+D0R0+...+D−mR−m.
\ N=D_{n-1}R^{n-1}+D_{n-2}R^{n-2}+...+D_{0}R^{0}+...+D_{-m}R^{-m}.
N=Dn−1Rn−1+Dn−2Rn−2+...+D0R0+...+D−mR−m.
| 二进制 | 八进制 | 十进制 | 十六进制 |
|---|
| 0000 | 00 | 0 | 0 |
| 0001 | 01 | 1 | 1 |
| 0010 | 02 | 2 | 2 |
| 0011 | 03 | 3 | 3 |
| 0100 | 04 | 4 | 4 |
| 0101 | 05 | 5 | 5 |
| 0110 | 06 | 6 | 6 |
| 0111 | 07 | 7 | 7 |
| 1000 | 10 | 8 | 8 |
| 1001 | 11 | 9 | 9 |
| 1010 | 12 | 10 | A |
| 1011 | 13 | 11 | B |
| 1100 | 14 | 12 | C |
| 1101 | 15 | 13 | D |
| 1110 | 16 | 14 | E |
| 1111 | 17 | 15 | F |
进制数的对应关系
1.2 进制转换

1.2.1 转十进制
“按权相加”
| 其它进制 | 转换 | 十进制 |
|---|
| 10101101.10B | 27+25+23+20+2-1+2-3 | 173.625D |
| 31Q | 3x82+1x81+1x80 | 201D |
| 2A.61H | 2x161+Ax160+6x16-1+1x16-2 | 42.3789D |
1.2.2 十进制转其它进制
“除R取余”
将十进制数连续用基数R去除,直到商数到0为止;每次除得的余数依次为二进制数由低到高的各位值。
| 47D | 101111B |
|---|
| 47/2 = 23 | a0=1 |
| 23/2 = 11 | a1=1 |
| 11/2 = 5 | a2=1 |
| 5/2 = 2 | a3=1 |
| 2/2 = 1 | a4=0 |
| 1/2 = 0 | a5=1 |
1.2.3 其它进制间互转
“按位转换”
1.3 机器数的编码
1.3.1 原码
最高位表示符号位,其余各位表示真值的绝对值;0表示正数,1表示负数。

真值0用原码表示有两种: - 0、+ 0
| 数值 | 原码 |
|---|
| X1 = + 1100110B | [X1]原 = 01100110B |
| X1 = - 1100110B | [X1]原 = 11100110B |
1.3.2 反码
正数的反码与原码相同;负数的反码,符号位仍用1表示,其余数值位按位取反。
真值0用反码表示有两种: - 0、+ 0
| 数值 | 原码 |
|---|
| X1 = + 1100110B | [X1]反 = 01100110B |
| X1 = - 1100110B | [X1]反 = 10011001B |
1.3.3 补码
补码是为了解决将减法转化为加法的问题。
正数的补码与原码相同;负数的补码先写出该负数相对应的正数的原码表示,然后按位取反,末位加1。
| +46D | +4 | 6D |
|---|
| +46D表示 | 0010 | 1110 |
| 按位取反 | 1101 | 0001 |
| 末位加1 | 1101 | 0010 |
| 16进制表示 D 2 | [- 46 ]补 = | D2H |
1.4按位运算符
1.4.1 & 按位与
| 运算规则 | 0 & 0 = 0 | 0 & 1 = 0 | 1 & 0 = 0 | 1 & 1 = 1 |
| 参加运算的两个对象同时为“1”,结果才为“1”,否则为“0”。 |
1.4.2 | 按位或
| 运算规则 | 0 | 0 = 0 | 0 | 1 = 1 | 1 | 0 = 1 | 1 | 1 = 1 |
| 参加运算的两个对象,只要有一个为“1”,结果即为“1”。 |
1.4.3 ^ 按位异或
| 运算规则 | 0 ^ 0 = 0 | 0 ^ 1 = 1 | 1 ^ 0 = 1 | 1 ^ 1 = 0 |
| 参加运算的两个对象,如果两个相应位为“异”(值不同),则结果为“1”,否则为“0”。 |
1.4.4 ~ 取反
| 运算规则 | ~ 1 = 0 | ~ 0 = 1 |
| 即将“0”变为“1”,“1”变为“0”。 |
1.4.5 >>>>>> 右移
| >> 运算规则 | 将一个运算对象的各二进制位全部右移若干位,正数左补“0”,负数左补“1”,右边丢弃。 |
| 操作数每右移一位,相当于该数除以“2”。 |
1.4.6 <<<<<< 左移
| << 运算规则 | 将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。 |
| 若左移时舍弃的高位不包含“1”,则每左移一位,相当于该数乘以“2”。 |
1.4.7 >>>>>>>>> 无符号右移
| >>> 运算规则 | 将一个运算对象的各二进制位全部右移指定位数;右移后左边空出的位用“0”填充,移出右边的位被丢弃。 |
1.4.8 不同长度的数据进行位运算
如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。
以long型4字节,int型2字节为例,右对齐后,左边不足的依照下面三种情况补足:
如果整型数据位正数,左边补16个0;
如果整型数据位负数,左边补16个1;
如果整型数据为无符号数,左边补16个0;