进制转换
二进制 八进制 十进制 十六进制
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 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,结果位1,否则为0
| 两位有一个1,结果为1,否则为0
^ 两位一个为0,一个为1,结果为1,否则为0
异或的运算特点为:如果 a^b=c,那么就有 c^b=a 以及 c^a=b
~ 将二进制中的0变成1,1变成0
原码,补码,反码
1) 二进制的最高位是符号位,0表示正数,1表示负数
1==》 0000 0001
-1==》 1000 0001
2)正数的原码,反码,补码都一样
3)负数的反码,符号位不变,其他位取反
4)负数的补码等于反码+1
1=》原码 0000 0001 反码 0000 0001 补码 0000 0001
-1=》原码 1000 0001 反码 1111 1110 补码 1111 1111
5)0的补码,反码都是0
6)在计算机计算的时候,都是以数字的补码形式进行计算的
左移运算符 <<
实际上,左移一位就是乘以2,也就是乘以2的n次方
例如 9<<4
9的二进制(前面省略一串 0000 )
0000 0000 0000 1001
左移4位就是把二进制数左移4位
0000 0000 1001 0000
即为十进制的144
右移运算符 >>
右移n位,相当于除以2的n次方,并且往小里取整(正数(1.1就取1)负数(-1.1就取-2))
0左移,右移都是0
>> :右移 最高位是0,左边补齐0;最高为是1,左边补齐1 (也就是区分正数,负数)
<< :左移 左边最高位丢弃,右边补齐0
>>>:无符号右移 无论最高位是0还是1,左边补齐0
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方
右移一位相当于除2,右移n位相当于除以2的n次方。
12>>1 结果:6 12/2^1
12>>2 结果:3 12/2^2
12<<1 结果 :24 12x2^1
12<<2 结果 :48 12x2^2
-25 >> 4 = -2 (-1点多,向下取就是-2)
-2 >> 4 = -1 (-0点多,向下取就是-1)
18 >> 4 = 1 (1点多,向下取就是1)
问题 -20 >>3 =-3
负数的右移,就是补码高位补1,然后按位取反加1即可
-20的二进制为1001 0100 ,
在计算机中应用补码(按位取反并加1)表示为:1110 1100,
右移三位后为1111 1101,
再还原为原码:1000 0011.即-3.
16进制转10
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
十六进制转换成十进制:方法是:将其它进制按权位展开,然后各项相加,就得到相应的十进制数;这里讨论的是整数,从右边开始,每一位的权值分别是 16^0 16^1 16^2 .....
然后乘以对应的数值最后加起来就是啦。如
CDH=C*16^1+D*16^0=12*16+13*1=205
二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义
0000 0000 0 00 NUL ␀ 空字符(Null)
0000 0001 1 01 SOH ␁ 标题开始
0000 0010 2 02 STX ␂ 本文开始
0000 0011 3 03 ETX ␃ 本文结束
0000 0100 4 04 EOT ␄ 传输结束
0000 0101 5 05 ENQ ␅ 请求
0000 0110 6 06 ACK ␆ 确认回应
0000 0111 7 07 BEL ␇ 响铃
0000 1000 8 08 BS ␈ 退格
0000 1001 9 09 HT ␉ 水平定位符号
0000 1010 10 0A LF ␊ 换行键
0000 1011 11 0B VT ␋ 垂直定位符号
0000 1100 12 0C FF ␌ 换页键
0000 1101 13 0D CR ␍ 归位键
0000 1110 14 0E SO ␎ 取消变换(Shift out)
0000 1111 15 0F SI ␏ 启用变换(Shift in)
0001 0000 16 10 DLE ␐ 跳出数据通讯
0001 0001 17 11 DC1 ␑ 设备控制一(XON 启用软件速度控制)
0001 0010 18 12 DC2 ␒ 设备控制二
0001 0011 19 13 DC3 ␓ 设备控制三(XOFF 停用软件速度控制)
0001 0100 20 14 DC4 ␔ 设备控制四
0001 0101 21 15 NAK ␕ 确认失败回应
0001 0110 22 16 SYN ␖ 同步用暂停
0001 0111 23 17 ETB ␗ 区块传输结束
0001 1000 24 18 CAN ␘ 取消
0001 1001 25 19 EM ␙ 连接介质中断
0001 1010 26 1A SUB ␚ 替换
0001 1011 27 1B ESC ␛ 跳出
0001 1100 28 1C FS ␜ 文件分割符
0001 1101 29 1D GS ␝ 组群分隔符
0001 1110 30 1E RS ␞ 记录分隔符
0001 1111 31 1F US ␟ 单元分隔符
0111 1111 127 7F DEL ␡ 删除
二进制 十进制 十六进制 图形
0010 0000 32 20 (空格)(␠)
0010 0001 33 21 !
0010 0010 34 22 "
0010 0011 35 23 #
0010 0100 36 24 $
0010 0101 37 25 %
0010 0110 38 26 &
0010 0111 39 27 '
0010 1000 40 28 (
0010 1001 41 29 )
0010 1010 42 2A *
0010 1011 43 2B +
0010 1100 44 2C ,
0010 1101 45 2D -
0010 1110 46 2E .
0010 1111 47 2F /
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
0011 1010 58 3A :
0011 1011 59 3B ;
0011 1100 60 3C <
0011 1101 61 3D =
0011 1110 62 3E >
0011 1111 63 3F ?
二进制 十进制 十六进制 图形
0100 0000 64 40 @
0100 0001 65 41 A
0100 0010 66 42 B
0100 0011 67 43 C
0100 0100 68 44 D
0100 0101 69 45 E
0100 0110 70 46 F
0100 0111 71 47 G
0100 1000 72 48 H
0100 1001 73 49 I
0100 1010 74 4A J
0100 1011 75 4B K
0100 1100 76 4C L
0100 1101 77 4D M
0100 1110 78 4E N
0100 1111 79 4F O
0101 0000 80 50 P
0101 0001 81 51 Q
0101 0010 82 52 R
0101 0011 83 53 S
0101 0100 84 54 T
0101 0101 85 55 U
0101 0110 86 56 V
0101 0111 87 57 W
0101 1000 88 58 X
0101 1001 89 59 Y
0101 1010 90 5A Z
0101 1011 91 5B [
0101 1100 92 5C \
0101 1101 93 5D ]
0101 1110 94 5E ^
0101 1111 95 5F _
二进制 十进制 十六进制 图形
0110 0000 96 60 `
0110 0001 97 61 a
0110 0010 98 62 b
0110 0011 99 63 c
0110 0100 100 64 d
0110 0101 101 65 e
0110 0110 102 66 f
0110 0111 103 67 g
0110 1000 104 68 h
0110 1001 105 69 i
0110 1010 106 6A j
0110 1011 107 6B k
0110 1100 108 6C l
0110 1101 109 6D m
0110 1110 110 6E n
0110 1111 111 6F o
0111 0000 112 70 p
0111 0001 113 71 q
0111 0010 114 72 r
0111 0011 115 73 s
0111 0100 116 74 t
0111 0101 117 75 u
0111 0110 118 76 v
0111 0111 119 77 w
0111 1000 120 78 x
0111 1001 121 79 y
0111 1010 122 7A z
0111 1011 123 7B {
0111 1100 124 7C |
0111 1101 125 7D }
0111 1110 126 7E ~
进制的转换公式
二进制转换十进制
假设有一个二进制数 101100100,转换成10进制就是 356
1x2^2 + 1x2^5 + 1x2^6 + 1x2^8 = 356
八进制转换十进制
假设有一个8进制的1507,转换成十进制为839
那么就是
7x8^0 + 0x8^1 + 5x8^2 + 1x8^3 = 839
十六进制转换十进制
假设有一个十六进制的2AF5
那么计算就是
5x16^0 + Fx16^1 + Ax16^2 + 2x16^3 = 10997
如何快速的进行 2进制,10进制,16进制 的 相互转换
先记住二进制 的8421
首先我们来看一个二进制数:1111,它是多少呢?
你可能还要这样计算:1×2º+1×2¹+1×2²+1×2³=1×1+1×2+1×4+1×8=15。
我们必须直接记住1111每一位的权值,并且是从高位往低位记,:8、4、2、1。 即,最高位的权值为2³=8,然后依次是 2²=4,2¹=2,2º=1。
记住8 4 2 1,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。
接下来我们练习 通过 8421 的方式 进行 快速的计算 , 2,10,16进制的转换
1111 = 8 + 4 + 2 + 1 = 15 =F
1110 = 8 + 4 + 2 + 0 = 14= E
1101 = 8 + 4 + 0 + 1 = 13= D
1100 = 8 + 4 + 0 + 0 = 12 =C
1011 = 8 + 0 + 2 + 1 = 11= B
1010 = 8 + 0 + 2 + 0 = 10 =A
1001 = 8 + 0 + 0 + 1 =9 =9
……
0001 = 0 + 0 + 0 + 1 = 1= 1
0000 = 0 + 0 + 0 + 0 = 0= 0
二进制数要转换为十六进制
二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):
1111 1101 , 1010 0101 , 1001 1011
F D , A 5 , 9 B
16进制数转换为二进制数
反过来,当我们看到 FD时,如何迅速将此16进制数转换为二进制数呢?
先转换F:
看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。
接着转换D
看到D,知道它是13,13如何用8421凑呢?应该是:8 + 4 + 1,即:1101。
所以,FD转换为二进制数,为:1111 1101
十进制数转换成2进制
由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。
比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:
被除数 计算过程 商 余数
1234 1234/16 77 2
77 77/16 4 13 (D)
4 4/16 0 4
结果16进制为:4D2
然后我们可直接写出4D2的二进制形式:
0100
1101
0010
其中对映关系为:
0100 – 4
1101 – D
0010 – 2
二进制数转换成10进制数
同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。
下面举例一个int类型的二进制数:
01101101 11100101 10101111 00011011
我们按四位一组转换为16进制:6D E5 AF 1B
十进制转十六进制
采余数定理分解,
例如将487710转成十六进制:
487710 ÷ 16 = 30481….14(E)
30481 ÷ 16 = 1905….1
1905 ÷ 16 = 119….1
119 ÷ 16 = 7….7
7 ÷ 16 = 0….7
这样就计到487710(10)=7711E(16)
2进制转成8进制
从右至左,每3个为一组,不足的补0,通过转换为十进制的方法把它们转换为数字
2进制原码 1010 0100
3位(不够的补0) 010 100 100
得到为 2 4 4
8进制转成2进制
每一个数转化为3位的二进制数即可,不足的补0,再按顺序排列即可。
例如8进制的 244,三位分别转换
2---》010
4---》100
4---》100
即为010100100