进制与运算

 
  1. 进制转换

  • 十进制 --> 二进制

打比方:
//      12 = 1100(二进制)
//      11 = 1011 (二进制)
官方的办法:



173 = 173÷128(2的7次方)  173 %128÷64  173 %128%64 ÷32  173 %128%64%32 ÷16 ... 173 %128%64%32 % 16 % 8 %4 %2 ÷1 = 1 0 1 0..1
逆推规律是:先要先找到最接近十进制整数的 2n   
 
  • 十进制--> 十六进制

比方:常用到的颜色RGB
R RED    0~255 
G GREEN  0~255 
B BLUE    0~255 

白色:R,G,B都为255  255十六进制色值就是 255÷ 16 255% 16 ÷1  即为15 15 
表示成十六进制就是 F F
所以白色即可表示为:0xFFFFFF


特殊情况:
负数怎么转二进制

比方:-5转二进制
转换之前先了解下二进制。反码和补码,大学都学过
例:拿十六位字节开刀      00000000 00000001  
反码是:                         11111111 11111110 
补码是 反码+1:             11111111 11111110

 先了解5的二进制是: 00000000 00000101
反码:                       11111111 11111010 
补码:                       11111111 11111011(这便是-5的二进制表达方式)

这里需要了解的是:二进制第一位代表符号位,0 表示正数 1表示负数
因此在java中 short(十六位)  最大值是 01111111 11111111 =  215 -1
                                         最小值是 10000000 00000000 = 01111111 11111111+1 = - 215
所以这里就了解了为什么short的范围是( -215 ~215 -1)
同样的道理 byte范围是(-128~127)ps:128= 27同样的道理int也是一样。

负数转二进制其实也比较简单的,先截取小数点前面的数正常转换,再把后面的数不停的乘以2直到取到小数点后面为0 
打比方: 7.25   7+0.25    7--> 111
0.25×2=0.5  取0   0.5×2=1.0 所以 0.25 --> 01(用的不多知道就好了)double的范围有空可以研究下

同样n进制转十进制比较简单就不做记录了。

  • 十六进制<==>二进制

比较简单首先   二进制 -->十六进制
规律:把二进制四位四位分开  分别转化
打比方:10010010  ∵ 1001 = 9 ; 0010 = 2;∴ 10010010 = 0x92
十六进制转二进制也是一样,逆着来就是。


  1. 位运算的使用

    1. 先是最简单的<< 和 >>

打比方:(以下二进制都用8位表示)
5 << 1  = 0000 0101<< 1 = 0000 1010 = 10 
5 <<2   = 10<<1 = 0001 0100 = 20
规律可循 左移n位就是  乘以 2n 右移同样的道理,结果是除以 2n
所以代码中的乘以2除以4的代码全部可以替换了。。
特殊情况: -5 = 1111 1011 >> 1 = 1111 1101 取反码+1 =   0000 0010+1 = 3
公式理解为:                                 
x = n>>m (m>0)                                 x = n<<m (m>0)
当 n>0  x= x÷ 2m                            分割线              x= n× 2m
当n<0  x=(x-1)÷ 2m                                                  
 
     2.& 和 | 与和或    ^ 和 ~ 异或和非
          与运算:进制位上都是1才取1其他都是0,即:0&0=0; 0&1=0;1&0=0;1&1=1;
          打比方:5&10 = 0000 0101 & 0000 1010  =  0000 0000 =0   11&5 = 1
                    
                    或运算:进制位上只要有一个数有1就为1 ,即:0|0=0; 0|1=1;1|0=1;1|1=1;
                    打比方:5|10 = 0000 0101 | 0000 1010  =  0000 1111 = 15     11|5=15    
                    
                    利用点: 2 & ( 2m -1)(n>m) = 0      2 | ( 2m -1)(n>m) = 2 +( 2m -1)   
                    例如:表的权限控制 。例如设置权限 a,b,c,d值为 1,2,4,8   给甲(x)发权限(y)代码是x= x  | y;判断甲权限是否有y代码是 x&y>0。
                    

                 异或   (类似与磁场同级为阴)  : 0^0=0; 0^ 1=1;1^0=1;1^1=0;
                 打比方:5^10 = 0000 0101 ^ 0000 1010  =  0000 1111 = 15   11^5 = 14
                  观察以上可以得出规律: (a^b) + (a&b) = a | b
                 
                 非用法不一样一点  :~0=1 ;~1=0
                 打比方:~5 = ~0 000 0101 = 1 111 1010 = -6(取反码+1)
                 规律:~a  = -(a+1)


                 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值