package com.sky.basic;
public class Operator {
/**
* 计算运算符:+,-,*,/;
* @author sky
*/
private void computOperator(){
int a=8;
int b=5;
//对于除法运算,根据基本类型的自动转换规则,当除数和被除数都是整数时,得到的结果
//也是整数。因此8/5得到的是1,而不是1.6
int f=a/b;
double g=a/b;
System.out.println("\n\t f=a/b = "+f+"; (g=a/b = )"+g);
//只要除数和被除数中有一个为double或者float,结果就不同了,8/5.0得到是1.6
double h=a/(b*1.0d);
float i=a/(b*1.0f);
System.out.println("\n\t h=a/(b*1.0d)="+h+"i=a/(b*1.0f)= "+i);
}
/**
* 比较运算符:==;<;>;!=;<=;>=;
*/
private void compareOperator(){
int a=5;
int b=10;
System.out.println("\n\t (a==b)="+(a==b));
System.out.println("\n\t (a<b) ="+(a<b));
System.out.println("\n\t(a>b)="+(a>b));
System.out.println("\n\t(a!=b)="+(a!=b));
System.out.println("\n\t(a<=b)="+(a<=b));
System.out.println("\n\t(a>=b)="+(a>=b));
System.out.println("\n\t(a=b)="+(a=b));
}
/**
* 位运算符:&;|;^;~;>>;>>>;<<;
*/
private void bitOperator(){
byte a=23;//"00010111"
byte b=6; //"00011010"
//按位与,两个运算数都为1时,结果为1,其余结果为0;
int c=a&b;//"00010010";
System.out.println("\n\t (c=a&b)="+c);
//按位或,两个运算数都为0是结果为0,其余结果为1;
int d=a|b;//"00011111"
System.out.println("\n\t (d=a\b)="+d);
//按位异或,两个运算数相同时结果0,不同时为1;
int e=a^b;//"00001101";
System.out.println("\n\t (e=a^b)="+e);
//按位非,0变1,1变0
int f=~a;//"11101000";
//注意:java采用二进制补码存储数字,整数的原码和补码一致
//对于负数,符号不变,将原码取反然后加1,得到补码,
//补码"11101000"对应的源码是"10011000"即-24;
System.out.println("\n\t f"+f);
//右移,左边空出以符号位填充
int g=a>>1;//"00001011"
System.out.println("\n\t (g=a>>1)="+g);
//右移,左边空出以0填充
int h=a>>>1;//"00001011"
System.out.println("\n\t (h=a>>>1)="+h);
//对负数操作时,>>和>>>得到的结果会不一样
System.out.println("\n\t (-24>>1) ="+(-24>>1)+";(-24>>>1)="+(-24>>>1));
//左移
int i=a<<1;//"00101110"=46
System.out.println("\n\t (a<<1)="+(a<<1));
}
/**
* 布尔运算符:&&;||;!;&;|;^;
*/
private void booleanOperator(){
boolean b1=true;
boolean b2=true;
boolean b3=false;
//&&运算符:对运算数进行与运算,当所有运算数都为true时,结果为true,
//否则结果为false
if(b1&&b2&&b3){
System.out.println("\n\t变量b1,b2,b3的值都为true");
}else{
System.out.println("\n\t变量b1,b2,b3中至少有一个值为false");
}
//注意&&是短路与,意思是:当对运算数的表达式进行从左到右运算时,若遇到有运算
//数的值为false,则结束运算,将结果置为false
int i=2;
int j=0;
if(b3&&((j=i)==2)){
}
System.out.println("\n\t j = "+j);
if(b1&&((j=i)==2)){
}
System.out.println("\n\t j = "+j);
//||运算符:对运算数进行或运算,当所有运算数都为false时,结果为false,否则结果为true
if(b1||b2||b3){
System.out.println("\n\t变量b1,b2,b3中至少有一个的值为true");
}else{
System.out.println("\n\t变量b1,b2,b3的值都为false");
}
//同样,||是短路或,意思是:当对运算数的表达式进行从左到右运算时,若遇到
//有运算数的值为true,就结束运算,将结果置为true;
if(b1||((j=j-1)==1)){
}
System.out.println("\n\t j = "+j);
if(b3||((j=j-1)==1)){
}
System.out.println("\n\t j = "+j);
//!运算符:对运算数的值进行取反运算,运算数位true,取反为false
if(!b1){
System.out.println("\n\t变量b1为false,因为b1取反后的值为true");
}else{
System.out.println("\n\t变量b1为true,因为b1取反后的值为false");
}
//&运算符,和&&一样,对运算数做与操作,不同的是它不是短路的,它会运算完所有的运算数表达式
if(b3&((j=i)==2)){
System.out.println("\n\tb3&((j=i)==2):true");
}else{
System.out.println("\n\tb3&((j=i)==2):false");
}
System.out.println("\n\t j="+j);
if(b1&((j=j-1)==0)){
}
System.out.println("\n\t j="+j);
//|运算符,和||一样,对运算数进行或操作,但它不是短路
if(b1|((j=1)==2)){
System.out.println("\n\t b1|((j=1)==2):true");
}else{
System.out.println("\n\t b1|((j=1)==2):false");
}
System.out.println("\n\t j = "+j);
if(b3|((j=j-1)==1)){
}
System.out.println("\n\t j = "+j);
//^运算符,对运算数做异常或操作,相同为false,不同为true
if(b1^b2){
System.out.println("\n\t变量b1,b2的值不同");
}else{
System.out.println("\n\t变量b1,b2的值一样");
}
}
/**
* 赋值运算符:=;+=;*=;&=;|=;^=;
*/
private void evalueOperator(){
//=是最常见的赋值运算符
int i=5;//变量i 的赋值为5
//+=运算符是先将运算符左边的运算数的值加上右边的运算数的值
//将结果再赋值给运算符左边的运算数
i+=3;//等价于i=i+3;
i-=3;//等价于i=i-3;
i*=3;//等价于i=i*3;
i/=3;//等价于i=i/3;
i&=3;//等价于i=i&3;
System.out.println("\n\t(i&3) = "+i);
i|=3;//等价于i=1|3;
System.out.println("\n\t(i|=3) = "+i);
i^=3;//等价于i^=3;
System.out.println("\n\t (i^=3)="+i);
}
/**
* 其他运算符:三元运算符;++;--;-;
*/
private void otherOperator(){
int i=5;
//++是将运算数加1
//++i表示先将i加1后再进行运算
if(i++==5){
System.out.println("\n\t 表达式(i++==5)的值为true");
}else{
System.out.println("\n\t 表达式(i++==5)的值为false");
}
System.out.println("\n\t i="+i);
//i++表示先进行运算,再讲i的值加1
i=5;
if(++i==5){
System.out.println("\n\t 表达式(++i==5)的值为true");
}else{
System.out.println("\n\t 表达式(++i==5)的值为false");
}
System.out.println("\n\t i = "+i);
//--将运算数减1,同样,--i是将i减1,再进行运算;i--是先进行运算,再将i减1
i--;
--i;
//可以用三目运算符替代简单的if语句
//格式是:x=a?b:c;如果a的值为true,则将b的值赋予x,否则将c的值赋予x。
int x=(i>=0)?i:-i;//将一个减号-和数字连用,是取数字的负数
System.out.println("\n\t i的绝对值为:"+x);
}
public static void main(String[] args) {
Operator operator=new Operator();
System.out.println("\n\t 计算运算符方法的输出:");
operator.computOperator();
System.out.println("\n\t 比较运算符方法的输出:");
operator.compareOperator();
System.out.println("\n\t 位运算符方法的输出:");
operator.bitOperator();
System.out.println("\n\t 布尔运算符方法的输出:");
operator.booleanOperator();
System.out.println("\n\t 赋值运算符方法的输出:");
operator.evalueOperator();
System.out.println("\n\t 其他运算符方法的输出:");
operator.otherOperator();
}
}