算数运算符 ,三个代码
class Demo1_Operator { //operator 运算符
public static void main(String[] args) {
/*
* a:+号在java中有三种作用,代表正号,做加法运算,字符串的连接符
* b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
* c:/获取的是除法操作的商,%获取的是除法操作的余数
* %运算符
* 当左边的绝对值小于右边绝对值时,结果是左边
* 当左边的绝对值等于右边或是右边的倍数时,结果是0
* 当左边的绝对值大于右边绝对值时,结果是余数
* %运算符结果的符号只和左边有关系,与右边无关
* 任何一个正整数%2结果不是0就是1可以用来当作切换条件
*/
System.out.println(10 / 3); //整数相除结果只能是整数
System.out.println(10 / 3.0); //如果想得到小数,把其中一个数变成小数,另一个数在运算的时候会自动类型提升
System.out.println(-5 % 5);
System.out.println(13 % -5);
}
}
第二个代码就是自加自减
第三个代码是测试
class Test1_Operator {
public static void main(String[] args) {
//第一题
/*int a = 10;
int b = 10;
int c = 10;
a = b++; //a = 10 ,b = 11
c = --a; //a = 9, c = 9
b = ++a; //a = 10, b = 10
a = c--; //a = 9, c = 8
System.out.println("a = " + a + ",b = " + b + ",c = " + c);*/
//第二题
/*int x = 4;
// 4 + 6+ 60
int y = (x++)+(++x)+(x*10);
System.out.println("x = " + x + ",y = " + y);*/
//第三题问哪句会报错,为什么
byte b = 10;
//b++; //b = (byte)(b + 1)
b = b + 1; //当byte与int进行混合运算的时候,会提升为int类型,两个int相加的结果还是int,赋值给byte会损失精度
System.out.println("b = " + b);
}
}
赋值运算符
两个代码 第一个代码比较简单 第二个代码还是存在着类型转换的问题
class Test1_Operator {
public static void main(String[] args) {
// 面试题:看下面的程序是否有问题,如果有问题,请指出并说明理由。
short s=1;s = s+1; //当short与int进行运算的时候,会提升为int类型,两个int类型相加的结果也是int类型
//short s=1;s+=1; //s = (short)(s + 1);
System.out.println(s);
}
}
关系运算符 这个没有什么东西 就是大于 小于 不等于
逻辑运算符 这个代码没有什么东西 就是&和|的关系 还有一个短路&短路|关系,就是真假的一个判断 ,不写代码了 但是最重要的不要搞得反了 & 是与 ,|是或,&两个全为真才是真,|有一个为真就是真,|看这个样子事就是少
位运算符 这个太有意思了 6 按位取反是-7 6的反码补码和原码都一样,取反是x的补码,减1是x的反码,再取反(除了符号位),就是该数
class Demo1_Operator {
public static void main(String[] args) {
/*
* &,|,^,~ 的用法
* &:有0则0
* |:有1则1
* ^:相同则0,不同则1
* ~:按位取反
*/
System.out.println(6 & 3); //2
System.out.println(6 | 3); //7
System.out.println(6 ^ 3); //5
System.out.println(~6); //-7?
}
}
/*
110
& 011
-----------
010
110
| 011
-----------
111
110
^ 011
-----------
101
00000000 00000000 00000000 00000110 6的原码反码补码都是本身
11111111 11111111 11111111 11111001 对6取反
- 00000000 00000000 00000000 00000001
---------------------------------------
11111111 11111111 11111111 11111000 反码
10000000 00000000 00000000 00000111 原码(-7)
*/
class Demo2_Operator {
public static void main(String[] args) {
/*
* 位异或运算符的特点
* ^的特点:一个数据对另一个数据位异或两次,该数本身不变。
*/
System.out.println(5 ^ 10 ^ 10);
System.out.println(5 ^ 10 ^ 5);
/*
* 请自己实现两个整数变量的交换(不需要定义第三方变量)
* 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
*/
int x = 10;
int y = 5;
//需要第三方变量,开发推荐用这种
/*int temp;
temp = x;
x = y;
y = temp;*/
//不需要定义第三方变量,有弊端,有可能会超出int的取值范围
/*x = x + y; //10 + 5 = 15
y = x - y; //15 - 5 = 10
x = x - y; //15 - 10 = 5*/
//不需要第三方变量,通过^来做
x = x ^ y; // 10 ^ 5
y = x ^ y; // 10 ^ 5 ^ 5 y = 10
x = x ^ y; // 10 ^ 5 ^ 10 x = 5
System.out.println("x = " + x + ",y = " + y);
}
}
class Demo3_Operator {
public static void main(String[] args) {
/*
* <<:左移 左边最高位丢弃,右边补齐0
* >>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
* >>>:无符号右移 无论最高位是0还是1,左边补齐0
* 最有效率的算出2 * 8的结果
*/
//左移,向左移动几位就是乘以2的几次幂
//System.out.println(12 << 1); //24
//System.out.println(12 << 2); //48
/*
00000000 00000000 00000000 00001100 12的补码
(0)0000000 00000000 00000000 000011000 24的补码
(00)000000 00000000 00000000 0000110000 48的补码
*/
//右移,向右移动几位就是除以2的几次幂
//System.out.println(12 >> 1);
//System.out.println(12 >> 2);
/*
00000000 00000000 00000000 00001100 12的补码
000000000 00000000 00000000 0000110(0) 6
0000000000 00000000 00000000 000011(00) 3
*/
//最有效率的算出2 * 8的结果
System.out.println(2 << 3);
}
}
三元运算符
这里面三元运算符,前面是一个判别式,如果为真,输出前面的值,如果不为真,输出后面的值,
还有一个就是键盘输入,分为三步,第一步 导包 第二部,创建对象,第三步 接受对象