类型转换
变量相加,首先提升类型,再做操作。
常量相加,它先做操作,然后判断结果是否在左边的范围内容,如果在就不报错。如果不在,报错。
public static void main(String[] args) {
// TODO Auto-generated method stub
byte b1=3,b2=4,b;
// b = b1+b2; // 右边类型自动提升
b = (byte)(b1+b2); // 显示类型转换
b = 3+4;
}
(1)计算机中数据的存储和运算都是采用补码进行的。
(2)数据的有符号表示法
用0表示正号,1表示负号。
A:原码
正数:正常的二进制
负数:符号为为1的二进制
B:反码
正数:和原码相同
负数:和原码的区别是,符号位不变,数值位取反。1变0,0变1
C:补码
正数:和原码相同
负数:反码+1
(3)补充:float浮点数在计算机中的表示
符号位 指数位 底数位
S E M
public static void main(String[] args) {
// byte b = 130;
// 解决方案
// 方案1
// int a = 130;
// 方案2
byte b = (byte) 130;
System.out.println(b); // -126
}
/*
十进制:130
A:第一步,先把十进制转换为二进制
二进制:00000000 00000000 00000000 10000010
由于此二进制是一个正数,所以,补码也是00000000 00000000 00000000 10000010。
B:做强制类型转换
二进制:00000000 00000000 00000000 10000010
截取后就变成了:10000010
C:操作后的数据是补码,你看到的是原码
符号位 数值位
补码: 1 00000010
反码: 1 00000001
原码: 1 11111110
*/
算术运算符
// %的最终结果和第一个数据的符号相关。
// 用%,如果余数为0,说明整除。
System.out.println(5%3); //2
System.out.println(5%-3);//2
System.out.println(-5%3);//-2
System.out.println(-5%3);//-2
++,--:自增自减运算符。
A:单独使用
放在操作数据的前后,效果一样。
B:参与操作使用
放在操作数前面,先自增或者自减,然后再参与运算
放在操作数后面,先参与运算,然后再自增或者自减
int a = 10;
int b = a++;
System.out.println(a);//11
System.out.println(b);//10
System.out.println("------------");
int c = 10;
int d = ++c;
System.out.println(c);//11
System.out.println(d);//11
System.out.println("------------");
int e = 10;
//e++;
++e;
System.out.println(e); //11
int i = 1;
System.out.println(i++ + ++i + i++ + ++i);//1+3+3+5
赋值运算符
// short s = 1;
// s = s + 1;
// 有问题,可能损失精度
short s = 1;
s += 1; //s = s + 1;
// 这个是没有问题的。
// 因为这个式子等价于:
// s = (s的数据类型)(s + 1);
关系运算符与逻辑运算符
&&和&的区别? 前者为关系运算符,有短路效果,只要左边是false,右边不执行。而后者为逻辑运算符,全部执行。
||和|的区别? 前者为关系运算符,有短路效果,只要左边是true,右边不执行。而后者为逻辑运算符,全部执行。
位运算符
A:计算出3,4的二进制
3的二进制:00000000 00000000 00000000 00000011
4的二进制:00000000 00000000 00000000 00000100
B:位&运算 有0则0
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
------------------------------------
00000000 00000000 00000000 00000000
C:位|运算 有1则1
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
------------------------------------
00000000 00000000 00000000 00000111
D:位^运算 相同则0,不同则1
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
------------------------------------
00000000 00000000 00000000 00000111
E:位~运算 把数据每个位都按位取反
00000000 00000000 00000000 00000011
~11111111 11111111 11111111 11111100
反:11111111 11111111 11111111 11111011
原:10000000 00000000 00000000 00000100
F:<<
4的二进制:
00000000 00000000 00000000 00000100
(00)000000 00000000 00000000 0000010000
G:>>>
原:10000000 00000000 00000000 00100000
反:11111111 11111111 11111111 11011111
补:11111111 11111111 11111111 11100000
>>>
11111111 11111111 11111111 11100000
0011111111 11111111 11111111 111000(00)