1.二进制

二进制只有0和1,我认为对于新手来说,一定要把这里0和1当做是一种符号来记忆,而不是当做数字。

下面先给个简略的对应表

表一

十进制

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

二进制

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

十六进制

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

       还记得当年学单片机的时候老师讲过进制的转换的方法,有一个比较快的方法,就是记住对应位上的“权”就行了

       比如:二进制(4位)对应的位权是8 4 2 1,就是说这个位置如果有数,那就是代表有多大。现在我们来算一个7的二进制,显然,第一位不能是1,如果是就超过了(8>7),第二位就应该有,所以是1(4<7),距离7还差,那继续,第三位也得有,现在总共是6,还差1,那第四位也得有,如此得到二进制位0111;当然了,这里是为了方便表示用的4位,如果想实现更大的数的转换也可以用这个方法,比如44的二进制应该是多少,很显然,这次我们需要更多的位数来表示才行,那我们先列出一排0(8个),这次第一位到最后一位的位权显然就不同了,不过也很好推出来,在先前,你肯定发现了前一位总是后一位位权的2倍,那么我们就能知道位权8前面的应该是16...以此类推。这里显然128,64>44,32<44,那么前两位都应该是0,第三位应该是1,这时候,由于位数上来了,我们有必要拿出一些快速判断的能力出来了,32+16>44,所以第4位应该是0...如此往复,我们很容易得到44的二进制表示应该为0010 1100。关于二进制转换为十进制就很简单了,只需要记住位权,一路做加法便好。

表二

二进制

1

1

1

1

1

1

1

1

 位权

128

64

32

16

8

4

2

1

 

       那么二进制和十六进制的转换捏?这里先记住一件事情,4位二进制对应一位十六进制数。如表一所示。

       如同二级制和十进制的转换一般,记住位权的对应关系就好,这里稍微补充说明下十六进制的表示方式,因为十六进制中是包括了0~9,所以当出现821等用十进制数字表示的十六进制数时,便会难以区分,那么就有必要添加符号以区分开来,一般是在十六进制前加上“0x”(是数字0哦)来表示是十六进制数,如果没有,那一般认为是十进制数。

       这里依旧举个简单的例子,0x14的二进制是多少?

       显然这是一个十六进制数(废话),因为前面有“0x”;接着对于二进制的第一位来说很明显得有因为8<14,接着又是同样的步骤,很快就能得到应该是1110。

       另外,如果十六进制数大于15的话(或者说是不在0-15之间),那么应当注意到4位二进制数可能不足以表示这个十六进制数。那么当你遇到比较大的数进制转换时,关于二进制到十六进制,还有必要补充另一件事情,比如说,当你遇到下面一串二进制数时:0010010101110101110 

       如果你是个新手,那么你可能会有一些疑惑的地方,比如我这里说4位二进制数对应一位十六进制数,那么是从从左到右划分4位,还是从右到左划分呢?

0010 0101 0111 0101 110 (从左到右划分4位)        001 0010 1011 1010 1110 (从右到左划分4位)

       很明显,这里两种划分得出的结果肯定是不一样的。这里你记住一定从右划分,不足位补为0,比如上面的二进制数划分出来应该是:0001 0010 1011 1010 1110(从右到左划分4位,不足位已补为0)

 

       关于十进制与十六进制的转换,我个人认为最快的方法是先把十进制or十六进制换成二进制,再进行之前的步骤。

 

       最后,亲爱的读者,如果你足够细心和好奇,你可能会发现这里并没有提到负数的进制转换。因为它和无符号数的进制转换不大一样,要理解那个,你得了解原码,反码以及补码之间的转换关系。(关于那个,等一等,想起来再更。)