随机数与位运算

随机数:

Math:算数类
Math.random();生成随机数。
Random:随机数类
Math.random();其实是调用Random.nextDouble();
两个方法都返回0.0-1.0之间的浮点数;不包含1.0。
Math不需要实例化。Math中的所有的类都由static修饰,可以直接访问方法。
Math.random()*10之后就会生成0-10之间的浮点数……以此类推;
Random()必须实例化。Random.nextDouble();也会产生0.0-1.0之间的浮点数。
要取0-10之间的数。与之前方法一致。

延伸:计算机原理

1字节=8位
1byte=8bit;
原码–>反码–>补码

01.在计算机中真正参与运算的是补码。
02.java语言中所有数字都是有符号的。       
    正数最高位(最左边)是0     负数最高位(最左边)是1
             1        
         00000001
03.正数和0的反码补码原码是一致的。         
    1+2=3是10进制的运算        
    二进制的运算:         00000001     1的补码           
                                  +     
                        00000010     2的补码       
                        00000011     结果转换为10进制=3
04.负数的反码:符号位不变   其他取反(0变1    1变0)           
   负数的补码=反码+1       
   -2+1=-1     10进制运算       
   二进制运算:
        -2的源码:10000010     需要转化为反码          
        -2的反码:111111101    需要转换为补码          
        -2的补码:111111110     
                     +  
                000000001     1的补码
                1111111111    结果的补码  
                    最高位为1为负数   需要转换为反码   反码=补码-1
                1111111110      结果的反码   
                    需要转换为源码    符号位不变   其他取反
                100000001      结果的源码
位运算:    
    按位与     &           
    参与运算的两个数据,按二进制位进行"与"运算。         
    规则:0&0=0      0&1=0     1&0=0      1&1=1
    即:参加运算的两个对象只要有一个0,其值就为0;都为1则是1。 
        3&5=1  0000   0011   
                     &  
               0000   0101   
                     =
              0000    0001              
    负数需要按补码形式参与按位与运算            
    特殊用途:
        1.清零。即使全部二进制为0,只要与各个位数按位与,即可达到想要的结果
        2.取到一个中指定位。
            假如10101110。取最低四位
            1010 1110&0000    1111=0000   1110即可得到。


    按位或      |      
    参与运算的两个对象,按二进制位进行或运算。       
    规则:0|0=0       0|1=1   1|0=1        1|1=1
    即:参加运算的两个对象只要有一个1,其值就为1         
        3|5=7    0000    0011
                      |
                 0000    0101
                      =
                 0000   0111        
    负数需要按照补码形式参与按位或运算           
    特殊用途:
      1.对一个位置置为1。找到一个数,对应要置为1的位,该数的对应位数为1,其余为0。
        将1010   0000的低4位置为1    
        用1010   0000|0000   1111=1010    1111即可得到。  


   按位异或        ^        
   参数运算的两个数据,按二进制位进行异或运算    
   规则:  0^0=0     0^1=1     1^0=1      1^1=0        
   即:参加运算的两个对象,如果两个相应位值不同,则该结果为1,否则为0       
   特殊作用:        
        使特定位翻转。
        例如:1010    1110   使后四位翻转
        1010   1110^0000  1111=1010    0001即可得到
        与0相异或,保留原值。
        1010   1110^0000   0000=1010    1110    



    按位取反       ~       
    参加运算的一个数据,按二进制位进行取反操作       
    规则:~1=0     ~0=1      
    使一个数的最低位为0,可以表示:a&~1。      
    ~1的值为1111  1111   1111   1110,再按与运算最低位一定为0。    
    按位取反~的优先级比算术运算符、关系运算符、逻辑运算符、其他的按位运算符都高。


    算数左移(<<)        
    将一个运算符的各二进制位全部左移(左边的丢弃,右边补0)        
    左移几位相当于原数字乘2的几次方        
    例如:             3 <<2(3为int型)           
    把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011  
    把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,
    在低位(右侧)的两个空位补零。
    则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100
    转换为10进制为12



    算数右移(>>)        
    将一个运算符的各二进制位全部右移(符号位不变,左边补上符号位,正数补0,负数补1) 
    右移几位相当于除以2的几次方      
    例如:             11 >>2(11为int型)             
    11的二进制形式:0000 0000 0000 0000 0000 0000 0000 1011
    最终结果是0000 0000 0000 0000 0000 0000 0000 0010            
    转换为10进制为2。  


    逻辑右移        
    将一个运算符的各二进制位全部右移(符号位不变,不管正负都在左边补上符号位0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值