----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
【变量】
当数据不确定的时候,需要对数据进行存储时,就定义一个变量来完成存储动作
变量:就是将不确定的数据进行存储,也就需要在内存中开避一个空间
变量通过数据类型,变量名称,数据来完成开避内存空间
【为了节约内存】
如果运算在100以下用byte装 -128-127
如果运算在30000以下用short装就行了 32767
单精度 4个8位
双精度 精确程序更高 8个8位 默认类型
char 0到65535
【类型转换】
byte b = 3;
b = b + 2; 哈哈报错了,自动向上转型了,
b = (byte)(b+2); 先转型,再赋值
【算术运算符】
int x=4270;
x=x/1000 因为int型做运算还是int型,所以是4
x=x%1000 270 1%5左边如果小于右边,结果是左边
1%-5 -1%5如果出现负数只看被么数,不看负号OK
例:int a=5,b; b=b+4 b没赋值不能使用
b = a++; 先赋给b,然后a在自增
b = ++a; 先a自增,然后赋给b
int k = 0;
int ret = ++k + k++ + ++k + k;
步聚: 1 + k++ + 2 + k
2++ + 2 + k
3 + 2 + 3 = 8
【转义字符】
在linux里面,换行由一个字符表示,就是\n
在windows里面,换行是由两个字符来表示的,\n 和 \r
char c="中";一个汉字两个字节,char也是两个字节
如果某个特殊的汉字没有被包含在unicode编码字符集中,那么这个char型变量中就不能存储这个特殊汉字。char默认是unicode编码占用两个字节
【赋值和比较运算符】
short a=4;
a=a+5; 这个报错 这个是两次运算,先做运算在做赋值,不会做自动转换
a+=a; 这个可以自动转换, 这个就一次赋值过程,会做一次自动转换
两者区别一个编辑失败一个编辑通过
=是赋值运算符 ==是比较运算符!=不等于
在java不允许这样写:11>x>9
【逻辑运算符】
&:两边都为true结果为true:
int x=7; x>4 & x<9 true & true = true;
|:两边有一个true结果为true: true | false= true;
异或 :true false 为true 两边不同结果为true;
! not(非) !true=false
【双与(短路)&& 】
&和&&的特点:
&:无论左边是true还是false,右边都运算
&&:当左边为false时,右边不运算(短路)
【|和||的特点】
|两边都参与运算
||当左边为true时,右边不运算
【位运算符】(左移右移)
3<<2 = 12; 3左移2位 右边加2个位(00),左边去2个位
0000-0000 0000-0000 0000-0000 0000-0011
向左移后: 0000-0000 0000-0000 0000-0000 0000-1100
6>>2 = 1 ; 6右移两位 右边去2个位, 左边加2个位(00)
0000-0000 0000-0000 0000-0000 0000-0110
右移两位后:0000-0000 0000-0000 0000-0000 0000-0001
向左移,越移越大 【相当于乖以2的移位位数次方】
右移,越移越小 【相当于除以2的移位位数次方】,高位最终补0还是1,看最高补的值
如果>>>右移,不管你是整数还是负数,空出来的位都拿0补
>>:最高位补什么由原有数据的最高位值而定,
如果最高位0,右移后,用0补空位
如果最高位1,右移后,用1补空位
>>>:无论最高位是什么,右移后,都用0补
【与-或-异或】
&:与运算
6 & 3 = 2
先把6和3都变成二进制位
110
& 011
010
|:或
6 | 5 = 7
110
| 101
111
^:异或
6 ^ 5 = 3
110
^ 101
011
~反码:
正数的反码:加1取负
如~1=-2,~2=-3,~6=-7,~54=-55
求取过程示例:
如求6的反码:
1、得到6的二进制形式:0000-0000 0000-0000 0000-0000 0000-0110
2、逐位取反:1111-1111 1111-1111 1111-1111 1111-1001
3、减1:1111-1111 1111-1111 1111-1111 1111-1000
4、除符号位外逐位取反:1000-0000 0000-0000 0000-0000 0000-0111
5、将其转化为十进制,既得6的反码为-7
负数的反码:取正减1
如~-2=1,~-3=2,~-7=6,~-55=54
求取过程示例:
如求-7的反码:
1、得到-7的原码: 1000-0000 0000-0000 0000-0000 0000-0111
2、逐位取反: 0111-1111 1111-1111 1111-1111 1111-1000
3、加1: 0111-1111 1111-1111 1111-1111 1111-1001
4、除符号位外逐位取反: 0000-0000 0000-0000 0000-0000 0000-0110
5、将其转化为十进制,既得-7的反码为6
7 ^ 4 =3
111
^ 100
011
^ 100
111 =7; 7 ^ 4 ^ 4 = 7;
一个数异或同一个数两次,结果还是那个数
异或类似加解密:异或一次加密,再异或一次解密,异或的同一个数相当于密钥
【两个整数变量值互换】
法1:可以定义第三个变量用来做中间变量: 常用
int a=2;
int b=3;
int c;
c=a;
a=b;
b=c;
法2:不容易读,效率高
int a=3;b=8;
a=a^b;
b=a^b;//相当于(a^b)^b
a=a^b;//相当于a^(a^b)
法3:这种方式有局限性,如果两个数较大相加就超出int范围了,容易损失精度
a=a+b;
b=a-b;
a=a-b;