数字以及运算
数字类型是编程中最基础的数据类型,用于:
- 存储各种数值数据
- 进行数学计算和运算
- 控制程序流程和逻辑
- 处理业务数据中的数值信息
图表说明
graph LR
byte_t[byte]
short_t[short]
int_t[int]
long_t[long]
float_t[float]
double_t[double]
byte_t --> short_t
short_t --> int_t
int_t --> long_t
int_t --> float_t
float_t --> double_t
详细说明
Java中的数字类型分为两大类:
-
整数类型:
- byte:8位,范围-128~127
- short:16位,范围±32K
- int:32位,范围±21亿,最常用
- long:64位,范围±922万亿亿
8位(byte):一个byte类型的数据占用8位内存空间。由于计算机使用二进制表示数据,8位可以表示的数值范围是2的8次方,即256个不同的数值。Java中的byte类型使用补码表示法,因此其范围是从-128到127。
-
浮点类型:
- float:32位,7位精度
- double:64位,15位精度,最常用
运算说明
Java中的数字类型支持多种运算操作,包括:
-
算术运算:
- 加法(
+
):用于两个数值的相加。 - 减法(
-
):用于从一个数值中减去另一个数值。 - 乘法(
*
):用于两个数值的相乘。 - 除法(
/
):用于一个数值除以另一个数值,注意整数除法会截断小数部分。 - 取模(
%
):用于获取两个数值相除后的余数。
- 加法(
-
自增和自减运算:
- 自增(
++
):将数值增加1。 - 自减(
--
):将数值减少1。
- 自增(
-
赋值运算:
- 赋值(
=
):用于将右侧的值赋给左侧的变量。 - 复合赋值(
+=
,-=
,*=
,/=
,%=
):用于在赋值的同时进行相应的算术运算。
- 赋值(
-
比较运算:
- 等于(
==
):用于比较两个数值是否相等。 - 不等于(
!=
):用于比较两个数值是否不相等。 - 大于(
>
)、小于(<
)、大于等于(>=
)、小于等于(<=
):用于比较两个数值的大小关系。
- 等于(
-
位运算:
- 与(
&
)、或(|
)、异或(^
):用于按位进行与、或、异或运算。 - 左移(
<<
)、右移(>>
)、无符号右移(>>>
):用于按位移动数值。
- 与(
这些运算符可以用于基本数据类型的运算,并且可以结合使用以实现复杂的计算逻辑。
例子
// 算术运算示例
public class ArithmeticExample {
public static void main(String[] args) {
int a = 10;
int b = 5;
int sum = a + b; // 加法
int difference = a - b; // 减法
int product = a * b; // 乘法
int quotient = a / b; // 除法
int remainder = a % b; // 取模
System.out.println("Sum: " + sum);
System.out.println("Difference: " + difference);
System.out.println("Product: " + product);
System.out.println("Quotient: " + quotient);
System.out.println("Remainder: " + remainder);
}
}
// 自增和自减运算示例
public class IncrementDecrementExample {
public static void main(String[] args) {
int x = 10;
x++; // 自增
System.out.println("After increment: " + x);
x--; // 自减
System.out.println("After decrement: " + x);
}
}
// 赋值运算示例
public class AssignmentExample {
public static void main(String[] args) {
int a = 10;
a += 5; // 复合赋值,加法
System.out.println("After += : " + a);
a -= 3; // 复合赋值,减法
System.out.println("After -= : " + a);
a *= 2; // 复合赋值,乘法
System.out.println("After *= : " + a);
a /= 4; // 复合赋值,除法
System.out.println("After /= : " + a);
a %= 3; // 复合赋值,取模
System.out.println("After %= : " + a);
}
}
// 比较运算示例
public class ComparisonExample {
public static void main(String[] args) {
int a = 10;
int b = 5;
System.out.println("a == b: " + (a == b)); // 等于
System.out.println("a != b: " + (a != b)); // 不等于
System.out.println("a > b: " + (a > b)); // 大于
System.out.println("a < b: " + (a < b)); // 小于
System.out.println("a >= b: " + (a >= b)); // 大于等于
System.out.println("a <= b: " + (a <= b)); // 小于等于
}
}
// 位运算示例
public class BitwiseExample {
public static void main(String[] args) {
int a = 5; // 0101
int b = 3; // 0011
System.out.println("a & b: " + (a & b)); // 与
System.out.println("a | b: " + (a | b)); // 或
System.out.println("a ^ b: " + (a ^ b)); // 异或
System.out.println("a << 1: " + (a << 1)); // 左移
System.out.println("a >> 1: " + (a >> 1)); // 右移
System.out.println("a >>> 1: " + (a >>> 1)); // 无符号右移
}
}
注意事项
-
整数除法会截断小数部分:例如,
5 / 2
的结果是2
,而不是2.5
。int result = 5 / 2; System.out.println("5 / 2 = " + result); // 输出: 5 / 2 = 2
-
大范围类型可以自动转换为小范围类型,但需要强制类型转换:
double largeValue = 9.99; int smallValue = (int) largeValue; // 强制类型转换 System.out.println("largeValue 转换为 smallValue: " + smallValue); // 输出: largeValue 转换为 smallValue: 9
-
浮点数比较应该使用误差范围,不要直接使用
==
:double a = 0.1 * 3; double b = 0.3; if (Math.abs(a - b) < 0.0001) { System.out.println("a 和 b 在误差范围内相等"); } else { System.out.println("a 和 b 不相等"); }
-
注意数值溢出问题,特别是int类型的最大值:
int maxValue = Integer.MAX_VALUE; System.out.println("int 最大值: " + maxValue); System.out.println("int 最大值加1: " + (maxValue + 1)); // 结果会溢出,输出负数
-
使用long类型时记得加L后缀:
long bigNumber = 10000000000L; // 注意L后缀 System.out.println("long 类型数值: " + bigNumber);
-
使用float类型时记得加f后缀:
float pi = 3.14f; // 注意f后缀 System.out.println("float 类型数值: " + pi);