一、运算符(operator):
算数运算符:+、-、*、/、%、++、--
赋值运算符:=、+=、-=、*=、/=、%=
关系(比较)运算符:<、<=、>、>=、!=、==
逻辑运算符:&、|、&&、||、!、^
注意:短路与、短路或的效率要比较高
移位运算符:
<<:左移位,补0(被位移数 * 2^位移数次方)
>>:右移位,补符号位(被位移数 / 2^位移数次方)
>>>:无符号右移位 正数:右移位,负数:先变正数再逐渐变小
位运算符:&(按位与)、|(按位或)、~(按位非|取反)、^(按位异或)
运算符优先级
() > 一元运算符 > 算数运算符 > 移位运算符 > 比较运算符 > 位/逻辑运算符 > 三目运算符 > 赋值运算符
二、进制(binary):
1. 常用进制接介绍:
进制:满几归零进一,称为进制数;
十进制:生活中常用的,满十归零进一;
取值范围:0~9 写法例如:1234 默认十进制
二进制:计算机中底层使用的是二进制,满二归零进一;
取值范围:0~1 写法例如:0b0001 或 0B0001
八进制:满八归零进一
取值范围:0~8 写法例如:01234
十六进制:满十六归零进一
取值范围:0~15 写法例如:0x11AB 或 0X22EF
10~15之间的写法:A(10)、B(11)、C(12)、D(13)、E(14)、F(15)
2. 进制之间的转换:
x进制转十进制:从右到左,每位数*x的n次方,n从0开始,依次+1;权项相加
十进制转x进制:十进制数 除以 x,直到商为0,将每次相除的余数从下到上依次排列。
3. 原码、反码、补码:
原码:将数字转为二进制数;适用于两个正数计算
规则:原码+原码=原码
问题:有负数参与的计算,计算结果不正确
反码:
规则:反码+反码=反码
正数:原码与反码一致
负数:符号位不变,其他位按位取反;
符号位产生进位舍弃,结果+1;再取反为原码;
问题:绝对值相同的正负数相加,计算结果不正确
补码:计算机中使用的是补码,适用于任何加法计算。我们使用原码的原因:原码转十进制好计算,
解决问题:
1. 原码计算中有负数参与的计算结果不正确
2. 反码中绝对值相同的正负数相加,计算结果不正确的问题
原码转补码:
正数补码:原码、反码、补码一致
负数补码:反码+1;
计算规则:补码+补码=补码
注意:符号位产生进位舍弃,结果不+1
最高位为符号位:0正数、1负数
原码:原码加法计算:原码+原码=原码 ---- 支持两个正数相加
2原码 + 9原码
00000000 00000000 00000000 00000010 2原码
00000000 00000000 00000000 00001001 9原码
------------------------------------------
00000000 00000000 00000000 00001011 11原码
-3原码 + 5原码
10000000 00000000 00000000 00000011 -3原码
00000000 00000000 00000000 00000101 5原码
-------------------------------------------
10000000 00000000 00000000 00001000 8原码(值有问题) 正确2
-3原码 + -2原码
10000000 00000000 00000000 00000011 -3原码
10000000 00000000 00000000 00000010 -2原码
------------------------------------------
00000000 00000000 00000000 00000101 5原码(值存在问题)
反码计算:
-3反码 + 5反码
10000000 00000000 00000000 00000011 -3原码
11111111 11111111 11111111 11111100 -3反码
00000000 00000000 00000000 00000101 5原码与反码一致
------------------------------------------------------
00000000 00000000 00000000 00000001 符号位进位,值+1
1
------------------------------------------------------
00000000 00000000 00000000 00000010 2 正数反码与原码一致 结果为2
-3反码 + -2反码
10000000 00000000 00000000 00000011 -3原码
11111111 11111111 11111111 11111100 -3反码
10000000 00000000 00000000 00000010 -2原码
11111111 11111111 11111111 11111101 -2反码
------------------------------------------
11111111 11111111 11111111 11111001 符号位进位值+1
1
-----------------------------------------
11111111 11111111 11111111 11111010 负数取反(符号位不变,其他按位取反)变原码
10000000 00000000 00000000 00000101 -5原码
10000000 00000000 00000000 00000011 -3原码
11111111 11111111 11111111 11111100 -3反码
00000000 00000000 00000000 00000011 3原码与反码一致
------------------------------------------------------
11111111 11111111 11111111 11111111 负数取反(符号位不变,其他按位取反)变原码
10000000 00000000 00000000 00000000 -0原码不准确
补码计算
10000000 00000000 00000000 00000011 -3原码
11111111 11111111 11111111 11111100 -3反码 符号位不变,其他按位取反
11111111 11111111 11111111 11111101 -3补码 反码+1
00000000 00000000 00000000 00000011 3原码、反码、补码一致
--------------------------------------------------------
00000000 00000000 00000000 00000000 正数原码、反码、补码一致,0结果正确
4. 强制转换精度丢失的问题
强制转换:高精度转低精度,精度丢失问题
例如:int(4字节)转byte(1字节) 1byte = 8bit(位) bit=0|1 二进制
byte只会截取int转补码后的后八位数,因此在-127~128之间强制转换无问题,当超过该范围,会出现精度丢失问题
5. 存储单位及单位换算:
1byte(字节) = 8bit(比特,位)
最大:0b11111111 255
最小:0b00000000 0
0~255 有256个数(不考虑正负);
1KB = 1024 byte
1MB = 1024 KB
1GB = 1024 MB
1TB = 1024 GB
1PB = 1024 TB
三、数据类型:
基本数据类型:字母全部小写
整型:
byte: 字节型 所占大小:1byte(字节) = 8bit(比特,位)
取值范围:-2^7 ~ 2^7-1
最大数:符号位-0 0b01111111
最小数:符号位-1 0b10000000(补码)
编译器默认是整型:要高精度转低精度要强转,(byte)
short: 短整型 所占大小:2byte
取值范围:-2^15 ~ 2^15-1
最大数:符号位-0 0b01111111 11111111
最小数:符号位-1 0b10000000 00000000
int: 整型 所占大小:4byte
取值范围:-2^31 ~ 2^31-1
long: 长整型 所占大小:8byte
取值范围:-2^63 ~ 2^63-1
四、流程控制语句:
1. 顺序流程
Java程序默认按照从上到下,顺序执行;
- 分支流程
- if系列
- if(){}适用于一种情况的判断
- if(){}else{}适用于两种情况的判断
- if系列
判断1次
if(){}else if(){}else{}适用于多种情况的判断
最少判断1次,最多判断情况数-1次
switch 适用于等值判断
switch(变量){
case 值1:break;
case 值2:break;
default:
}
变量的类型:int、Integer、byte、Byte、short、Short、char、Character、String、enum
case中无break,从匹配的case开始执行到switch结束(包括default)
case可存在多个
- 循环流程
- while(boolean表达式){}
- do{}while(boolean表达式);
- for(初始化表达式;boolean表达式;迭代因子){}
五、数组:
数组定义:
存储多个数据类型相同的数据;
数组特点:
- 长度固定,创建数组时必须要指定数组的长度,创建完成后,长度不允许改变;
- 创建数组时会按照指定的长度在堆空间中分配地址连续,大小相等的空间;
- 存储相同类型的数据,数组支持基本数据类型和引用数据类型;
- 数组为引用数据类型,栈空间中存储第一块空间的地址;
- 索引值范围:0 <= 索引|下标|角标 <= 数组长度-1