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