原码 补码 反码

进制转换
二进制	八进制	十进制	十六进制
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变成11变成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,所以四位全为11111。
接着转换D
看到D,知道它是1313如何用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
这样就计到48771010)=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            
posted @   朝阳1  阅读(147)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示