3. Java运算符和语句
补充上一章的变量:
变量---可认为是一个程序执行的最小单位
变量的格式:数据类型 变量名称=初始值;
1.Java中的数据类型:
a)基本数据类型
byte short int long float double char boolean
b)复合数据类型
2.基本数据类型转换
a)Boolean布尔型不参与基本数据类型转换;
b)基本数据类型精度排序(小---大)
c)隐式数据类型转换【自动数据类型转换】
数据类型精度低的转换成数据类型精度高的这个过程就是隐式数据类型转换【自动数据类型转换】
格式:高类型 变量名称=低【值/变量】;
例:
public class DataType{
public static void main(String args[]){
//100 int型赋值给double,自动类型转换
int intnum1=100;
double dounum1=intnum1;
double dounum2=123;
System.out.println("dounum1="+dounum1+",dounum2="+dounum2);
}
}
输出为:
E:学习记录第三课 Java运算符-语句>javac DataType.java E:学习记录第三课 Java运算符-语句>java DataType dounum1=100.0,dounum2=123.0
d)显式数据类型转换【强制数据类型转换】
数据类型精度低的转换成数据类型精度高的这个过程就是隐式数据类型转换【自动数据类型转换】
格式:低类型 变量名称=(低)高【值/变量】;
例:
public class DataType{
public static void main(String args[]){
//精度高赋值给精度低的会报错
//强制转换
double dounum3=13.14;
int intnum2=(int)dounum3;
int intnum3=(int)52.0f;
System.out.println("intnum2="+intnum2+",intnum3="+intnum3);
}
}
输出为:
E:学习记录第三课 Java运算符-语句>javac DataType.java E:学习记录第三课 Java运算符-语句>java DataType intnum2=13,intnum3=52
e) char与int
public class DataType{
public static void main(String args[]){
//chart 与int 转换
//自动类型转换
char char1='家';
int intnumb1=char1;
System.out.println("intnumb1="+intnumb1);//输出为23478
//强制类型转换
int intnumb2=23478;
char char2=(char)intnumb2;
System.out.println("char2="+char2);
}
}
输出为:
E:学习记录第三课 Java运算符-语句>javac DataType.java E:学习记录第三课 Java运算符-语句>java DataType intnumb1=23478 char2=家
f) int转换成byte
byte转换成int---隐式数据类型转换【自动数据类型转换】
int转换成byte---显式数据类型转换【强制数据类型转换】
例:
public class DataType{
public static void main(String args[]){
//byte转换成int---隐式数据类型转换【自动数据类型转换】
byte bytenum1=120;
int intnumtest1=bytenum1;
System.out.println("intnumtest1=="+intnumtest1);
//int转换成byte---显式数据类型转换【强制数据类型转换】
int intnumtest2=129;
byte bytenum2=(byte)intnumtest2;
System.out.println("bytenum2=="+bytenum2); //输出为-127
int intnumtest3=-130;
byte bytenum3=(byte)intnumtest3;
System.out.println("bytenum3=="+bytenum3); //输出为126
}
}
输出为:
E:学习记录第三课 Java运算符-语句>javac DataType.java E:学习记录第三课 Java运算符-语句>java DataType intnumtest1==120 bytenum2==-127 bytenum3==126
【超过范围规则】
- 当整数int转换成byte时,int取值正数超过byte范围以后,会从byte最小值向前推进计算。
- 当整数int转换成byte时,int取值负数超过byte范围以后,会从byte最大值向后推进计算。
比如129,超出127两个数,所以往负数那边走两个,得到-127;
比如-130,超出-128两个数,所以往右边正数走两个,得到126。
3.1 Java中的运算符
1)赋值运算符=
2)算术运算符
| + | - | * | / | % | ++ | -- |
| 加 | 减 | 乘 | 除 | 取余 | 自动加1 | 自动减1 |
【注意事项】
- /和%的区别:两个数据做除法,/取结果的商,%取结果的余数。整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
例:
public class YunSuanFu{
public static void main(String args[]){
int int1=100;
int int2=10;
int int3=3;
float float1=3f;
//+ 1.进行加法运算 2.连接符号
System.out.println(int1+"+"+ int2+"="+(int1+int2)); //110
System.out.println(int1+"-"+ int2+"="+(int1-int2)); //90
System.out.println(int1+"*"+ int2+"="+(int1*int2)); //1000
System.out.println(int1+"/"+ int2+"="+(int1/int2)); //10
//两个数据做除法,/取结果的商,%取结果的余数
System.out.println(int1+"/"+ int3+"="+(int1/int3)); //33
System.out.println(int2+"/"+ float1+"="+(int2/float1)); //33.333333
System.out.println(int2+"%"+ int3+"="+(int2%int3)); //1
}
}
- 变量++【先用后加1】 ++变量 【先加1后用】
变量-- 【先用后减1】 --变量 【先减1后用】
例:
public class YunSuanFu{
public static void main(String args[]){
//变量++【先用后加1】,第二次在输出值会自动加1
System.out.println(int1++);//100
System.out.println(int1);//101
// ++变量 【先加1后用】
System.out.println(++int1);//102
System.out.println(int1);//102
//--同理
System.out.println(int1--);//102
System.out.println(int1);//101
System.out.println(--int1);//100
System.out.println(int1);//100
}
}
3)比较运算符
| 符号 | 说明 |
| > | 判断是否大于,成立为true,不成立为false |
| < | 判断是否小于,成立为true,不成立为false |
| >= | 判断是否大于等于,成立为true,不成立为false |
| <= | 判断是否小于等于,成立为true,不成立为false |
| != | 判断是否不等于,成立为true,不成立为false |
| == | 判断是否等于,成立为true,不成立为false |
运算结果为boolean
例:
public class YunSuanFu{
public static void main(String args[]){
int a=15;
int b=20;
System.out.println(a+">"+b+"="+(a>b)); //false
System.out.println(a+"<"+b+"="+(a="+b+"="+(a>=b)); //false
System.out.println(a+"<="+b+"="+(a<=b)); //true
System.out.println(a+"=="+b+"="+(a==b)); //false
System.out.println(a+"!="+b+"="+(a!=b)); //true
}
}
输出为:
E:学习记录第三课 Java运算符-语句>javac DataType.java E:学习记录第三课 Java运算符-语句>java DataType 15>20=false 15<20=true 15>=20=false 15<=20=true 15==20=false 15!=20=true
4)逻辑运算符
| & | 逻辑与 | 有false则false |
| | | 逻辑或 | 都false则false |
| ^ | 逻辑异或 | 相同为false,不同为true |
| ! | 逻辑非 | 相反 |
| && | 短路与 | 作用和&相同,但有短路效果 |
| || | 短路或 | 作用和|相同,但有短路效果 |
【注意事项】
- &&运算符号的左边结果为false时,右边不执行;
- ||运算符号的左边结果为true时,右边不执行;
例:
public class YunSuanFu{
public static void main(String args[]){
//&逻辑与,有false则false
int i=10;
int j=20;
int k=30;
System.out.println((i>j)&(i>k));//false&false 输出为false
System.out.println((ik));//true&false 输出为false
System.out.println((i>j)&(ij)|(i>k));//false|false 输出为false
System.out.println((ik));//true|false 输出为true
System.out.println((i>j)|(ij)^(i>k));//false^false 输出为false
System.out.println((ik));//true^false 输出为true
System.out.println((i>j)^(ij));//false
System.out.println(!(i>j));//!false 即true
//&& ||
System.out.println((i>j)&& ((10/0)>1) ); //左边false,右边不执行,还是false
System.out.println((i1) ); //左边true,右边不执行,还是true
}
}
5)位运算符
| 符号 | 名称 | 作用 |
| ~ | 取反 | 0和1相反 |
| & | 按位与 | 相同1为1,不同为0 |
| | | 按位或 | 全0为0,有1则1 |
| ^ | 按位异或 | 不同为1,相同为0 |
| >> | 右移位 | 右移1位相当除2取商 |
| << | 左移位 | 左移1位相当于乘2 |
【注意】&和|既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean型,就作为逻辑运算符。如果两侧的操作数是整数类型,就是位运算符。
运算规则:
位运算符需要将数据转换成二进制【00101010】数据进行运算
掌握十进制转二进制 :短除法[笨] 8421码转化法
【8421码转化法】
1024 512 256 128 64 32 16 8 4 2 1
7=4+2+1----- 0 0 0 0 0 0 0 0 1 1 1 --- 00000111
13=8+4+1---- 0 0 0 0 0 0 0 1 1 0 1 --- 00001101
负数的2进制:实质上补码表示
正数的补码是本身
负数的补码是反码+1
反码的表示方法是:
正数的反码是其本身【原码】
负数的反码是在其源码的基础上, 符号位不变,其余各个位取反。
源码就是符号位加上真值的绝对值,即用第一位表示符号, 其余位表示值。
比如:-7的2进制 (源码---反码---补码)
-7————7的2进制—00000111---[-7的源码]10000111-----[-7的反码]11111000---[-7的补码]11111001
① |按位或 全0为0,有1则1
【7|-7】
【7 】00000111
【-7】11111001
11111111【转十进制—开头为1为负数,负数的补码11111111---负数的反码减个1就是11111110----负数的源码10000001-----对应得正数二进制为000000001,所以十进制为-1】
② &按位与 相同1为1,不同为0
【7 & -7】
00000111
11111001
00000001
③ ^按位异或 不同为1,相同为0
【7 ^ -7】
00000111
11111001
11111110
④ ~取反
⑤<< 左移位 2进制整体向左移动指定的位数
⑥>> 右移位 2进制整体向右移动指定的位数
面试题:最有效率的方法算出2乘以8等于几? 2<<3; 表示2 向左移3位
代码演示:
public class YunSuanFu{
public static void main(String args[]){
System.out.println(7 | -7); //-1
System.out.println(7 & -7); //1
System.out.println(7 ^ -7); //-2
System.out.println(7<<2); //28
System.out.println(7>>2); //1
}
}
6)三元运算符
格式: 关系表达式 ? 表达式1:表达式2;
首先计算关系表达式的值,
如果值为true,表达式1的值就是运算结果;
如果值为false,表达式2的值就是运算结果。
例:
public class YunSuanFu{
public static void main(String args[]){
//三元运算符
//定义两个变量
int g = 10;
int h =20;
//获取两个变量中的最大值
int max=g>h ? g : h;
System.out.println("max="+max); //输出为max=20
}
}



