重学Java 4 进制转换和位运算

天赋不好好使用的话,可是会被收回的哦

                                             ——24.1.13

一、进制转换

1.常用的进制

重学Java 4 进制转换和位运算_第1张图片

2.十进制和二进制之间的转换

1.十进制转二进制

辗转相除法——循环除以2,取余数,除到商为0为止,除完后,由下往上,得出换算后的数字

2.二进制转十进制

8 4 2 1规则

1 1 0 0

上下相乘再相加

重学Java 4 进制转换和位运算_第2张图片

3.二进制转化为八进制

三个为一组

110011 -> 二进制转为八进制,三位一组,不够三位,前面补0

110  011

1*2^2+1*2^1+0*2^0 = 6

0*2^2+1*2^1+1*2^0 = 3

将最终的6和3拼接在一起,成为63

重学Java 4 进制转换和位运算_第3张图片

4.二进制转化为十六进制

将二进制数四位为一组进行分组

10011011 -> 二进制转为十六进制,四位为一组,不够四位前面补0

1001 1011

1*2^3+0*2^2+0*2^1+1*2^0 = 9

1*2^3+0*2^2+1*2^1+1*2^0 = 11 = b

将最终的9和b拼接在一起,得到9b

重学Java 4 进制转换和位运算_第4张图片

二、位运算符

重学Java 4 进制转换和位运算_第5张图片

1.符号的介绍:

① &(与)-> 有假则假

② | (或) -> 有真则真

③ ~(非)-> 取反

④ ^(异或) -> 符号前后结果一样为false,不一样为true

        true ^ false = true

        false ^ true = true

        true ^ true = false

        false ^ false = false

2.  1代表true,0代表false

3. 我们要知道计算机在存储数据的时候都是存储数据的补码,计算也是用的数据的补码

但是我们最终看到的结果是原码换算得来

原码        补码        反码

4.正数的二进制最高位为0,负数的二进制最高位为1

5.如果是正数,正码、反码、补码都一致

        eg、5的原码        补码        反码都一致

                0000 0000 0000 0000 0000 0000 0000 0101        因为是正数,二进制最高位为0

        如果是负数,原码,反码,补码不一样

                反码是原码最高位不变,剩下的0和1互换

                补码是在反码的基础上+1

                根据补码算反码是在补码的基础上-1

        eg、-9

                原码:1000 0000 0000 0000 0000 0000 0000 1001

                反码:1111 1111  1111  1111  1111  1111  1111  0110

                补码:1111 1111  1111  1111  1111  1111  1111  0111

1.左移:<<

运算规则:左移几位就相当于乘以2的几次方

注意:当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位

例如:

2<<2        结果等于8        -2<<2        结果等于-8

快速算法:2*2^2                        -2*2^2

二进制算法

重学Java 4 进制转换和位运算_第6张图片 重学Java 4 进制转换和位运算_第7张图片

2.右移: >> 

运算规则:类似于除以2的n次,如果不能整除,则向下取整

9>>2        结果等于2(9除以2的2次方)

快速算法:9/2^2向下取整

例如:

9>>2        结果等于2          -9>>2        结果等于-3

9/2^2 = 2     向下取整        -9/2^2=-3     向下取整 

重学Java 4 进制转换和位运算_第8张图片重学Java 4 进制转换和位运算_第9张图片

 3.无符号右移: >>>

运算规则:往右移动后,左边空出来的位置直接补0,不管最高位是0还是1,空出来的都拿0补

正数:和右移一样

9 >>> 2        结果等于2

负数:右边移出去几位,左边补几个0,结果变为正数

-9 >>> 2        结果为1073741821

笔试题:

8 >>> 32位 -> 相当于没有移动还是8

8 >>> 34位 -> 相当于向右移动两位

4.按位与:&

小技巧:将0看为false,将1看为true

运算规则:对应位都是1才为1,相当于符号左右两边都为true,结果才为true

1 & 1        结果为1

1 & 0        结果为0

0 & 1        结果为0

0 & 0        结果为0

eg、

        5 & 3 -> 1

重学Java 4 进制转换和位运算_第10张图片

5.按位或: |

运算规则:对应位只要有1即为1,相当于符号前后只要有一个为true,结果就是true

1 | 1        结果1

1 | 0        结果1

0 | 1        结果1

0 | 0        结果0

eg、

        5 | 3        结果为7

重学Java 4 进制转换和位运算_第11张图片

6.按位异或:^

运算规则:对应位一样的为0,不一样的为1

1 ^ 1        结果为0,false

1 ^ 0        结果为1,true

0 ^ 1        结果为1,true

0 ^ 0        结果为0,false

eg、

        5 ^ 3        结果为6

重学Java 4 进制转换和位运算_第12张图片

7.按位取反: ~

运算规则:~0就是1  ~1就是0

eg、

        ~10        结果为-11

重学Java 4 进制转换和位运算_第13张图片

三、运算符的优先级

1.表达式不要太复杂

2.先算的使用(),记住,如果想让哪个表达式先运行,就加入小括号就可以了

3.运算符优先级如下图,优先级从低到高排列

重学Java 4 进制转换和位运算_第14张图片

四、总结

重学Java 4 进制转换和位运算_第15张图片

重学Java 4 进制转换和位运算_第16张图片重学Java 4 进制转换和位运算_第17张图片

重学Java 4 进制转换和位运算_第18张图片

你可能感兴趣的:(Java从0到1,java,开发语言,算法)