天赋不好好使用的话,可是会被收回的哦
——24.1.13
一、进制转换
1.常用的进制
2.十进制和二进制之间的转换
1.十进制转二进制
辗转相除法——循环除以2,取余数,除到商为0为止,除完后,由下往上,得出换算后的数字
2.二进制转十进制
8 4 2 1规则
1 1 0 0
上下相乘再相加
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
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
二、位运算符
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
二进制算法
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 向下取整
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
5.按位或: |
运算规则:对应位只要有1即为1,相当于符号前后只要有一个为true,结果就是true
1 | 1 结果1
1 | 0 结果1
0 | 1 结果1
0 | 0 结果0
eg、
5 | 3 结果为7
6.按位异或:^
运算规则:对应位一样的为0,不一样的为1
1 ^ 1 结果为0,false
1 ^ 0 结果为1,true
0 ^ 1 结果为1,true
0 ^ 0 结果为0,false
eg、
5 ^ 3 结果为6
7.按位取反: ~
运算规则:~0就是1 ~1就是0
eg、
~10 结果为-11
三、运算符的优先级
1.表达式不要太复杂
2.先算的使用(),记住,如果想让哪个表达式先运行,就加入小括号就可以了
3.运算符优先级如下图,优先级从低到高排列