1、自增自减运算
自增自减与赋值的执行先后顺序
// ++ 自增 表示原有数据+1
int a = 10;
a++;
System.out.println(a) //a = 11;
// -- 自减 表示原有数据-1
int b = 10;
b++;
System.out.println(b); //a = 9;
//自增赋值
a =10;
int c = a++; //执行顺序: c=a;a=a+1; 先赋值再自增
System.out.println("c:"+c+"\t a:"+a);c:10 a:11
a = 10;
int d = ++a; //执行顺序: a=a+1;d=a 先自增再赋值
System.out.println("d:"+d+"\t a:"+a);c:11 a:11
//在输出语句时需要注意
a=10;
System.out.println(a++); // 10
a=10;
System.out.println(++a); // 11
//思考问题
int i = 1;
int k = i+++i * i++; //1+2*2=5
//计算顺序和计算结果,i的结果???
// k =5; i = 3;
加“+”连接符
int a = 5;
int b = 6;
System.out.println(a+b+""); //11 先计算在拼接""
System.out.println(""+a+b); //56 a拼接"",作为字符串再拼接b
赋值运算
// 数据类型自动转型 byte,short、char类型的数据参与计算
byte a = 2;
short b =3;
char d ='a';
int sum1 = a+a;
int sum2 =a+b;
int sum3 = b+d;
int sum4 =a+10;
//byte,short、char类型的数据参与计算,结果输出的类型都是int
//思考问题??
a+=1; //此时a是什么类型的数据 byte
b*=100; //b是什么类型的数据 编译通过,内存溢出
//a += 1; 会被编译为:byte a = (byte)(a + 1);而 a = a + 1 呢?编译时会报错。因为 1 默认是 int 类型 byte + init 类型会隐私转换为 int 类型,将 int 类型直接分配给 byte 类型就会报错
位运算
void testMode3(){
//位运算 & 与 | 或 ^ 非 ~ 取反
/*
A = 00111010
B = 00101000
A&B = 00101000 二进制,在相同位置比较,两个数都为1,结果输出1 1&1 ==》1
A|B = 00111010 二进制,在相同位置比较,两个数只要有一个为1,结果输出1 1||0 ==》1
A^B = 00010010 二进制,在相同位置比较,两个数相同结果为0,不相同结果为1
~B= 11010111 二进制,在相同位置处取反,0-》1 1-》0
----------------
<< 左移 相当于 *2 不管正负数
>> 右移 相当于 /2
>>= 复合运算,移位后将移位后的值赋值给移位前的值。
如: k = 8; j=k>>2 ; 计算结果j=2但是k仍等于8 ;
k>>=2; 计算结果是2;k的值最终等于2
*/
System.out.println(8<<2); //32 8*2*2
System.out.println(8>>2); //2 8/2/2
System.out.println(2>>2); //0 2/2/2
/*
>>> 右移
1)正数相当于 >>
2)负数是先获取负数的原码--》反码--》反码+1得到补码;
对补码进行位移,左侧补0,左侧舍弃
注意:Java程序中负数十进制转二进制是按照32位来计算的
*/
注意:Java程序中负数十进制转二进制是按照32位来计算的
>>> 对于正数的计算,相当于 >>
对于负数的计算
1)将十进制负数转换成带符号的二进制原码 如:-24 》》 1000-0000 0000-0000 0000-0000 0001-1000 (原码)
2)获取它的反码 》》 1111-1111 1111-1111 1111-1111 1110-0111 (反码)
3)获取补码,在其反码的基础上加1 》》 1111-1111 1111-1111 1111-1111 1110-1000 (补码)
-24>>>3
1111-1111 1111-1111 1111-1111 1110-1000 (补码) 左移3位,左侧补0,右侧舍弃
---1111-1111 1111-1111 1111-1111 1110-1(000)
0001111-1111 1111-1111 1111-1111 1110-1 最终结果转换成
}
二进制转十进制
负数十进制转二进制
1)先不考虑负数,十进制转二进制
2)对二进制取反
3)取反后的二进制加1
例:-5转化成二进制数----------->11111011
1、(十进制)5=(二进制)00000101
2、(二进制)00000101逐位取反为:11111010
3、二进制数+1得:11111011
二进制的负数转为十进制
1)将二进制减1
2)对二进制取反
3)取反后换算成十进制
例:用逆向操作将二进制的负数转为十进制。11101101(二进制负数)转换成十进制。
1、将二进制数减1,得到:11101100。
2、将得到的11101100取反:得到:00010011
3、取反转换成十进制,得到19。在计算结果19的基础上要加上-号,即-19才是最终结果!