运算
变量的作用范围
从变量定义开始,到它所在的语句块结束的位置为止。
自增自减(++ --)
如果单独使用自增/自减
变量都会加1,a++ 和++a两者没有区别
在算数表达中时:
++a:先自增,再运算
a++: 先运算,再自增
int n = 7 00000000 00000000 00000000 00000111 7
n << 1 00000000 00000000 00000000 00001110 14 = 7 * 2^1
n << 2 00000000 00000000 00000000 00011100 28 = 7 * 2^2
n >> 1 00000000 00000000 00000000 00001110 14
位运算:
& 位与的运算
1&1 = 1
0&1 = 0
1&0 = 0
0&0 = 0
|位或的运算
1|1 = 1
1|0 = 1
0|1 = 1
0|0 = 0
^按位异或
0^0 = 0
1^1 = 0
0^1 = 1
1^0 = 1
~ 取反
~1 = 0
~0 = 1
int m = 5546546;
int n = 1233446;
m = 010101001010001000110010
n = 000100101101001000100110
异或: 010001100111000000010100
010001100111000000010100
或运算: 010101101111001000110110
010101101111001000110110
与运算: 000100001000001000100010
000100001000001000100010
原码:最高位是符号位,0代表正数,1代表负数,非符号的数值位为数值的二进制
反码:正数,反码与原码保持一致,负数的反码是对原码按位取反,最高位符号不变
补码:正数的补码和原码保持一致,负数的补码是对原码按位取反加1,符号位不变
eg:
1原码: 0000 0001
补码: 0000 0001
按位取反: 1111 1110
反码: 1111 1101
原码: 1000 0010 = -2
0原码: 0000 0000
补码: 0000 0000
按位取反: 1111 1111
反码: 1111 1110
原码: 1000 0001 = -1
自动转型:
算数运算过程中,如果数值类型不一致,把小范围的数据类型转换为大范围的数据类型,结果是大范围的数据类型
程序模块
一、某小伙想定一份外卖,商家的优惠方式如下:鱼香肉丝单点24元,油炸花生米单点8元,米饭单点3元。订单满30元8折优惠。鱼香肉丝优惠价16元,但是优惠价和折扣不能同时使用。那么这个小伙要点这三样东西,最少要花多少钱?
public class test01 {
public static void main(String[] args) {
double discount = (24 + 8 + 3)*0.8;
int pre = 16 + 8 + 3;
double min = pre < discount ? pre : discount;
System.out.println("最少花:" + min);
}
}
二、让用户分别输入姓名,语文,数学,英语 三门课的成绩,然后给用户显示:XX,你的总成绩为XX分,平均成绩为XX分。
public class test02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入名字:");
String name = scanner.next();
System.out.print("输入语文成绩:");
int chinese = scanner.nextInt();
System.out.print("输入数学成绩:");
int math = scanner.nextInt();
System.out.print("输入英语成绩:");
int english = scanner.nextInt();
int grade = chinese + math + english;
double average = grade/3;
System.out.println(grade);
System.out.println(average);
System.out.printf("%s,你的总成绩为%d分,平均成绩为%f分\n",name,grade,average);
}
}
四、若任意两数和是3的倍数或其中一个为3,则输出true,否者输出false
public class test01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入第一个数:");
int a = scanner.nextInt();
System.out.println("输入第二个数:");
int b = scanner.nextInt();
int c= (a + b ) % 3;
boolean d;
System.out.println("d:"+ ((c == 0) || (a == 3) || (b == 3)));
}
}