1. char ch = '您'
char类型的数据是两个字节
一个汉字是两个字节,由16个二进制组成的. 所以char类型的数据可以装中文
2.
short s = 3;
s= s+2; 和 s += 2; 有什么区别?
答:s= s+2; 编译失败因为s+ 2 时s会被提升为int类型,运算后的结果还是int类型,无法赋值给shot类型。 int类型是32个二进制位,四个字节, shot是16个二进制位2个字节,所以编译时会精度丢失的异常
而 s += 2 编译通过,+=运算符在给s赋值时自动完成了强转操作。
在JAVA中一共有八种基本数据类型,他们分别是 byte、short、int、long、float、double、char、boolean
其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样
byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)
short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)
int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)
3.逻辑运算符 -- 用于连接Boolean类型的表达式
& 与 : true & true = true; true & false = false; false & false = false; 特点: 都为真才是真
| 或: true | true = true; true | false = true; false | false = false; 特点: 只要有一个为真就是真
^ 异或 : true ^ true = false; true ^ false = true; false ^ false = false; 特点:两边相等结果是假,两边不同才是真; 可以参与位运算
! 非: !true = false;
&& 与 (短路功能)
& 和 && : 1. &无论左边是真是假,右边都运算; && 当左边为假时,右边不再运算,结果就是假 2. &可以参与位运算,
| 和 || :1 . | 两边都参与运算; || 当左边为真,右边不运算; 2. | 可以参与位运算
4. 位运算符:左移,右移,无符号右移
<< 左移 : 其实是乘以2的n次幂
>> 右移: 其实除以2n次幂,最高位补什么由原有数据的最高位值定: 如果最高位是0,右移后,用0补空位;如果最高位为1,右移后用1补空位
>>> 无符号右移:无论最高位是什么,右移后,都用0补
例如:
3<<2 的运算过程:
3的二进制: 0000-0000 0000-0000 0000-0000 0000-0011
0000-0000 0000-0000 0000-0000 0000-0011 两个高位00舍弃
空位补0: 0000-0000 0000-0000 0000-0000 0000-1100 =12
6>>2 的运算过程:
6的二进制: 0000-0000 0000-0000 0000-0000 0000-0110
10 两个低位10舍弃
空位补0: 0000-0000 0000-0000 0000-0000 0000-0001 = 1
6 & 3 = 2的运算过程:110 & 011 = 010
6 | 5 = 7 的运算过程: 110 | 101 = 111
6 ^ 5 = 3 的运算过程: 110 | 101 = 011
~ 反码:
~6的运算过程:
6的二进制: 0000-0000 0000-0000 0000-0000 0000-0110
取反 1111-1111 1111-1111 1111-1111 1111-1001 = -7
求取反后的十进制结果:(减一再取反)
减一 0000-0000 0000-0000 0000-0000 0000-0001
减一的结果 1111-1111 1111-1111 1111-1111 1111-1000
取反 0000-0000 0000-0000 0000-0000 0000-0111 = 7
因为1111-1111 1111-1111 1111-1111 1111-1001 减一再取反后结果是7 ,所以1111-1111 1111-1111 1111-1111 1111-1001就是-7 也就是 ~6 = -7
负数的表现形式: 例如:-6的表现形式是 6取反加1 也就是 -6 = ~6+1 = -7 + 1