目录
数据类型、运算符
基本数据类型
1.整数类型(4)
数据类型 | 字节 | 位数 | 范围 |
---|---|---|---|
Byte | 1字节 | 8位 | -128~127 |
Short | 2字节 | 16位 | -32768~32767 |
Int | 4字节 | 32位 | -2147483648~2147483647 |
Long | 8字节 | 64位 |
8 bit(位) = 1 byte(字节)
1024 byte = 1 kb
1024 kb = 1 mb
1024 mb = 1 gb
1024 gb = 1 t
注意:在UTF-8中汉字占3个字节
Long属于比int高级的数据类型,所以在赋值的时候要在整数后面加上L或l
Long love = 123456L;
2.浮点类型(2)
若想使用float型小数,则需要在小数后面添加F或f
Double类型可以在后面添加D或d,明确数据类型(可以不加)
数据类型 | 字节 | 位数 | 范围 |
---|---|---|---|
Float | 4字节 | 32位 | 1.4E~3.4028235E38 |
Double | 8字节 | 64位 | 4.9E-324~1.7976931348623157E308 |
3.字符类型(1)
不同编码产生的字节大小不同
数据类型 | 字节 | 位数 | 范围 |
---|---|---|---|
Char | 2字节 | 16位 | 65536个字符(单引号) |
转义字符
一种特殊的字符变量,以反斜杠“\”开头,后跟一个或多个字符
转义字符赋值给字符变量时,一样要使用单引号
字符 | 描述 |
---|---|
\ddd | 1~3位八进制数据所表示的字符,如\456 |
\uxxxx | 4位十六进制所表示的字符,如\u0052 |
\’ | 单引号字符 |
\” | 双引号字符 |
\ | 反斜杠字符 |
\t | 垂直制表符,将光标移到下一个制表符的位置 |
\r | 回车 |
\n | 换行 |
\b | 退格 |
\f | 换页 |
4.布尔类型(1)
Boolean 1字节 值:ture/flase 二进制:00000001
数据类型转换
不同的类型占用的内存空间不同
隐式转换(自动转换)
byte < short < int < long < float < double
显式转换(强制转换)
语法:(类型名)要转换的值
例:int a = (int) 45.25;
显示转换导致精度损失
float f = (float) 3.1415923; // 数据失准
int i = (int) f; // 小数点丢失
byte b = (byte) 129; // 数值越界溢出
数据类型的默认值
数据类型 | 默认值 | 说明 |
---|---|---|
byte、short、int、long | 0 | 整型零 |
float、double | 0.0 | 浮点零 |
char | ‘’ | 空格字符 |
boolean | false | 逻辑假 |
引用类型String | null | 空值 |
运算符
赋值运算符
(=)
算数运算符
+(加) -(减) *(乘) /(除) %(取余) 自增(++) 自减(–)
自增、自减:前置会先将自身先增或减,后置会先参与表达式运算
关系运算符
==(等于) <(小于) >(大于) <=(小于等于) >=(大于等于) !=(不等于)
逻辑运算符
&&(与) ||(或) !(非)
位运算符
操作类型是整型,可以是有符号的也可以是无符号的,位运算符的两大类型:位逻辑运算符和位移运算符
运算符 | 描述 |
---|---|
&(与) | a&b |
|(或) | a|b |
~(取反) | ~a |
^(异或) | a^b |
<<(左位移) | a<<2 |
>>(右位移) | b>>4 |
>>>(无符号位移) | x>>>2 |
位逻辑运算符
&、|、^、~ :前三个是双目运算符、后一个是单目运算符
(1)位与运算符:&
参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0,最左边的符号位也是要参与运算的
(2)位或运算符:|
参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0
(3)位异或运算符:^
参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1
(4)位取反运算符:~
只对一个操作数进行运算,将操作数二进制中的1改为0,0改为1
运算结果
总结:以(0、1和false、true)
&(与):有0则为0,有false则为false
|(或):有1则为1,有true则为true
~(取反):0取1,false取true
^(异或):需要运算
位移运算符
(1)左移运算符:<<
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零
根据左移运算符可以推导出:
左移运算有乘以2的N次方的效果。一个数向左移动1位,就相当于乘以2的1次方,移动两位就相当于乘以2的2次方,也就是乘以4
(2)带符号右移运算符:>>
符号位不变,按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零
(3)无符号右移运算符:>>>
无符号右移在二进制串移动之后,空位由0来补充,与符号位是0还是1毫无关系;注意:这里的无符号是忽略符号位,也参与移位
在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同
<<运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零
语法格式:需要移位的数字 << 移位的次数
num << 2:左移运算符。相当于num除以2*2
num >> 1:右移运算符。相当于num乘以2
>>>:无符号右移,忽略符号位,空位都以0补齐
在Java语言中,为了保证移动位数的有效性,以使右移位数不超过32位,采用了取余的操作,即a >>n 等价于 a >> (n%32)
左移<<:该数对应的二进制码整体左移,左边超出的部分舍弃,右边补零(低位补0)
253的二进制码1111 1101,在经过运算253<<2后得到1111 0100
“有符号”右移>>:该数对应的二进制码整体右移,左边的用原有标志位补充,右边超出的部分舍弃。如果值为正,则在高位补0,如果值为负,则在高位补1
无符号右移>>>:不管正负标志位为0还是1,将该数的二进制码整体右移,左边部分总是以0填充,右边部分舍弃。采用0扩展机制,也就是说,无论值的正负,都在高位补0
复合赋值运算符
三元运算符
**语法:**返回值 = 判断公式 ? 结果1 : 结果2
判断公式:一个返回布尔值的公式
int a = 1;
int b = a<3?2:3 结果:b=2
结果1:如果公式返回的是true,运算符结算返回结果1
结果2:如果公式返回的是false,运算符结算返回的结果2
圆括号
提升计算公式的优先级(和数学中的用法一致)、提升公式的可阅读性
int a =2,b=3;
a*b+5 先计算乘法;后计算加法 结果:11
a*(a+5) 先计算括号内,后计算括号外 结果:16
运算符优先级
优先级 | 描述 | 运算符 |
---|---|---|
1 | 括号 | () |
2 | 自增,自减,逻辑非,正负号,取反 | ++,–,!,±,~ |
3 | 乘,除,取余 | *,/,% |
4 | 加,减 | +,- |
5 | 左位移,右位移,无符号位移 | <<,>>,>>> |
6 | 大于,小于等于,大于,大于等于,判断继承关系 | <,<=,>,>=,instanceof |
7 | 等于,不等于 | ==,!= |
8 | 与 | & |
9 | 异或 | ^ |
10 | 或 | | |
11 | 并且 | && |
12 | 或者 | || |
13 | 赋值 | =,+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=,>>>= |