1.数据类型和变量 基本类型 占用内存 取值范围 byte 8bit/1字节 -128~127 short 16bit/2字节 -32768~32767 int 32bit/4字节 -21亿~21亿 long 64bit/8字节 -922亿亿~922亿亿
float 32bit/4字节 3.4E38 保留8位有效数字,最后一位不精确 double 64bit/8字节 1.7E308 保留16位有效数字,最后一位不精确
char 16bit/2字节 0~65535 '\u0000'~'\uFFFF' boolean 1bit true false
'a' 'A' '中' 保存字符的时候,实际上存储的是字符对应的Unicode编码(是一个0~65536之间的整数) 半角字符的Unicode编码和ASCII码一致 aA aA
进制的转换 十进制和二进制之间的转换 59 111011
二进制转十进制 111011 59 1 1 1 1 1 1 1 1 128 64 32 16 8 4 2 1 59=32+16+8+2+1 111011 123=64+32+16+1 1110001
------------------------------------------ 十进制和八进制 59 73
八进制转十进制 73 59 -------------------------------------------- 八进制转二进制 73 111011
二进制转八进制 111011 73
十进制转十六进制 59 3b
十六进制转十进制 3b 59 FFFF 1111 1111 1111 1111
2.运算符
a.算术运算符 + - * / % / 整数相除只计算整除的商,会丢掉余数 浮点数相除会保留相应的精度 浮点数和整除相除,首先将整数自动转换成浮点数类型,再计算 % 取余数 不管是整数还是浮点数都是计算整除之后的余数
++ -- a++ 和++a的区别 a++是先执行取值操作,再++ ++a是先++,再执行取值操作
b.赋值运算符 =
+= -= *= /= %= a+=3 --> a=a+3
c.关系运算符 比较两个数值的大小,运算结果一定是一个布尔值 == != > < >= <=
d.逻辑运算符 对布尔值进行运算的 ! 逻辑非 对一个布尔值进行运算 非真既假 非假既真
& 逻辑与 对两个布尔值进行运算,都为真,就为真 &&短路与 对两个布尔值进行运算,都为真,就为真 逻辑与无论条件是否成立,都会计算完所有的表达式 短路与计算到为假的表达式,就结束
| 逻辑或 对两个布尔值进行运算,只要有一个为真,就为真 || 短路或 对两个布尔值进行运算,只要有一个为真,就为真 逻辑或无论条件是否成立,都计算完所有的表达式 短路或计算到为真的表达式,就结束
e.条件运算符 三目运算符 三元运算符 ? : 表达式1?表达式2:表达式3
表达式1的结果一定是一个布尔值 如果表达式1为真,就执行表达式2 如果表达式1为假,就执行表达式3
|a-b| if(a<b){ c = b-a; }else{ c=a-b; }
int c = a<b?b-a:a-b;
f.位运算符 按照二进制位进行运算的运算符 & 按位与 按照位,都为1则为1,否则为0 1&1=1 0&0=0 0&1=0 3&5=1 011 &101 ------ 001
| 按位或 按照位,只要有一个1就为1 1|1=1 0|0=0 0|1=1 3|5=7 011 |101 ------ 111
^ 按位异或 按照位,相同为0 不同为1
3^5 011 ^101 ------ 110
<< 左移 按位向左移动,在右边补0,超出该类型的位数,会先和类型的长度做取模运算,再位移
>> 右移 按位向右移动,在左边补符号位[正数补0,负数补1]
>>> 无符号右移 按位向右移动,无论正负数,都是在左边补0
int 32 01101010 00101010 11010010 01011101 00000000 00000000 00000000 11111111 ---------------------------------------- 00000000 00000000 00000000 01011101
交换a和b的值
01101010 00000000 00000000 00000000 00000000 00101010 00000000 00000000 00000000 00000000 11010010 00000000 00000000 00000000 00000000 01011101
计算机中是采用二进制的补码形式表示数据 正数的补码和原码相同 负数的补码=对应正数的原码的反码+1
3 00000011 -3 00000011 --> 11111100 --> 11111101
1+(-1)=0 00000001 11111111 ------------ 100000000 00000001 11111110 11111111