03-java运算符-函数
单个"&",左边无论真假,右边都进行计算。
双个"&",左边为假,右边不进行计算。
"|"和"||" 的区别;
单个"|",左边无论真假,右边都进行计算。
双个"|",左边为真,右边不进行计算。
异或^
true^true =false
两边一样是false 不一样true
其他 和 | 或一样
"|"和"&" 做位运算
二进制进行|位运算,只有0|0时候为0 ,其他为1,比如6|5 先把6和5换成二进制。6的二进制为110,5的二进制为101 那么用位运算0|0得0 只要有1得1,算出为111,111换成十进制为7,所有6|5等于7
二进制进行&位运算,只有1&1得1,其他得0,同理可得6&5算出二进制得100,100换成十进制为4
"^"异或运算和"~"反码
任何相同二进制异或运算都得0,1^1=0,0^0=0,不相同的异或运算都得1,1^0=1,0^1=1。同理6^5的011
那么011的十进制是3。、
提示一个数异或两次变回本身。比如6^5^5的 110,101,101。先得011,再得110所有又变回原来的数值,此技巧可以用来转换数值,不需要第3个变量即可两个变量值互转。
3,位运算符
计算
&
6&3为2
110
& 011
010=2
|
6|3为7
110
& 011
111=7
^
6^3为5
110
^011
101=5
^ 011
110
6^3^3为6
一个数异或同房一个数两次 结果不变(实际引用加密)
~
反码
~6为-7
"<<"左移" >>"右移" >>>"无符号右移
原理
左移:空缺补0,被移除的高位丢弃,空缺位补0,比如32位二进制 0000....00011左移3位变成了0...00011xxx,则xxx补足000即可。规律左移是基数乘以2的移位幂次方,比如3<<2则是3*2*2也就是3乘以2的2次幂。
右移:最高位是什么就补什么。高位是1补1,是0就补0.,规律左移是基数除以2的移位幂次方,比如3>>1则是3/2也就是3除以2的1次幂。
无符号右移:无论高位是0还是1都补0
巧记
<<
3<<2 3*2的2次方=12
>>
8>>2为=2
2*8乘法原理
0010
*1000
0000
0000
0010
10000=16
面试题:
要求ab的值交换
(不用第三变量int c;c=a;a=b;b=c;)
1,整数过大时,容易强制转换,数据变化
a=a+b;
b=a-b;
a=a-b;
2,
a=a^b;
b=a^b;
a=a^b;
一个数异或同房一个数两次 结果不变(实际引用加密)
4,三元运算符
格式:
(条件表达式)?表达式1:表达式2;
条件成立就是表达式1
条件不成立就是表达式2
c=(1>0)?66:77;
结果c=66;
5,程序流程结构
判断结构
循环结构
顺序结构
条件语句:
格式1:
if(条件关系式)
{
语句块1;
}
格式2:
if(条件关系式)
{
语句块1;
}
else
{
语句块2;
}
关系运算符:
等于 ==
不等于 !=
大于 >
大于等于 >=
小于 <
小于等于 <=
逻辑运算符:
非 !
与 &&
或 ||
for循环语句:
for(循环变量=初始值;循环变量<=终止值;循环变量=循环变量+步长值)
{
循环体语句;
}
for(循环变量=初始值;循环变量>=终止值;循环变量=循环变量-步长值)
{
循环体语句;
}
for(循环变量=初始值;循环变量<=终止值;循环变量=循环变量*步长值)
{
循环体语句;
}
while循环语句:
当关系表达式成立时,执行循环体中的语句,然后返回重新检验关系表达式是否成立,若不成立则不执行循环体中语句,结束循环。
while(关系表达式)
{
循环体语句块;
}
do...while循环语句:
首先执行循环体中语句块,然后检验关系表达式是否成立,若成立,则继续执行循环体中语句,否则,结束循环。
do
{
循环体语句块;
}while(关系表达式)
数组的声明方法:
数据类型 数组名称[ ]=new 数据类型[元素个数];
数据类型 数组名称[ ]={数据集合};
例如:
double s[]=new double[20];
double t[]={12,34,56,78,98};
数组的输入模块:
int i;
for(i=0;i<20;i=i+1)
{
a[i]=Math.floor(Math.random()*(N-M+1))+M;
}
for(i=0;i<5;i=i+1)
{
s1=input1.readLine();
a[i]=Double.parseDouble(s1);
}
数组的输出模块:
for(i=0;i<20;i=i+1)
{
System.out.println(a[i]);
}
随机函数的使用:
随机函数:Math.random()
返回[0,1.0) 之间的随机数。0<=Math.random()<1
生面某范围内随机整数:
1. 产生0~1这间的随机小数x
x=Math.random( );
2. 产生[0,n]这间的随机整数x
x=(int)Math.floor((n+1)*Math.random( ));
3. 产生[m,n]范围内的随机整数x
x=(int)Math.floor((n-m+1)*Math.random( )+m);
(注:部分资料引用于http://my.oschina.net/bozhi/blog/179585)
🐳 作者:hiszm 📢 版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,万分感谢。 💬 留言:同时 , 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |