数字以及运算
数字类型是编程中最基础的数据类型,用于:
- 存储各种数值数据
 - 进行数学计算和运算
 - 控制程序流程和逻辑
 - 处理业务数据中的数值信息
 
图表说明
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);