[黑马程序员]进制转换学习笔记

时间:2023-02-19 13:23:38

 

------------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------

 

这篇博客早就想写了,对于进制的转换,大学老师有讲,自己也有看书学过,每次感觉都懂了,但好像又没懂似得,通过黑马的教学视频,我又感觉自己好像懂了,但以防今后会忘记,所以还是留下笔记吧,以便今后复习......

(1)十进制转二进制

原理:对十进制数进行除2运算

2 |_6__ 0

2 |__3__ 1

1 1

然后倒过来就是 110

①通过代码也可以: Integer.toBinaryString(6);

(2)二进制转十进制

原理:二进制乘以2ⁿ次方的过程

110 <-- 0×2º + 1×2¹ + 1×2²

0 + 2 + 4 = 6

①计算技巧

1 1 1 1 1 1 1 1

128 64 32 16 8 4 2 1

所以00110101 = 32+16+4+1 = 53

②因为128+64+32+16+8+4+2+1 = 255

所以一个字节最大255

(3)二进制转十六进制

原理:四个二进制位就是一个十六进制位

0101 1010 十进制是90

_____ _____

5 10 A

90 = 0×5A

(4)二进制转八进制

原理:三个二进制位代表一位

1011010 十进制是90

先补位

001 011 010

___ ___ ___

1 3 2

所以90 = 0132

(5)负数的二进制

-6 = 6的二进制取反加1

⒈在内存中 6 四个字节是这样表示的

00000000 00000000 00000000 00000110

⒉取反: 1-->0 0-->1

11111111 11111111 11111111 11111001

⒊加1

11111111 11111111 11111111 11111001

+ 00000000 00000000 00000000 00000001

______________________________________

11111111 11111111 11111111 11111010

这个最终的数字就是-6

①通过代码也可以: Integer.toBinaryString(-6);

②负数的最高位是1 正数的最高位是0

(6)在位运算符的时候,也设计到了进制的转换

根据上面的方法

0000-0000 0000-0000 0100-1100 1110-0110

0 0 0 0 4 12 14 6

该数十六进制的表现形式为 0x4CE6

学习了以后,我们可以这样思考:

⒈&15可以取出最后的四位

0000-0000 0000-0000 0100-1100 1110-0110 = 60

&0000-0000 0000-0000 0000-0000 0000-1111 = 15

______________________________________

0000-0000 0000-0000 0000-0000 0000-0110 = 12

⒉右移四位 再&15

0000-0000 0000-0000 0000-0100 1100-1110 | 0110 = 60>>4 = temp

&0000-0000 0000-0000 0000-0000 0000-1111 = 15

__________________________________________

0000-0000 0000-0000 0000-0000 0000-1110 = 3

通过以上方式就可以将二进制转成十六进制

①&15之后的数字

0-9 A B C D E F

0-9 10 11 12 13 14 15

(char)(12-10+'A') 即可打印出来

②int temp = 60 >>>4;

用无符号右移

因为 >> 如果是负数,前面会补1就永远也移不完了

③如果是十六进制就四位四位处理

同理如果是八进制就三位三位处理

如果是二进制就一位一位的处理

 

-----------------------------ASP.Net+Android+IO开发 .Net培训 期待与您交流!------------------------------