随机数:
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)