使用位运算符计算Java数据类型的最大值与最小值
用Java位运算符计算各数据类型的最大最小值
一、整数类型(byte/short/int/long)
Java的整数类型均采用补码存储,最高位为符号位:0表示正数,1表示负数。利用位运算符可以直接构造出最值的二进制位模式:
通用规则
对于n位有符号整数:
- 最大值:符号位为0,其余所有位为1 → 可通过
~(1 << (n-1))构造(1 << (n-1)得到最高位为1、其余为0的数,按位取反后符号位变0,其余位全1) - 最小值:符号位为1,其余所有位为0 → 可通过
1 << (n-1)构造(补码中该值对应最小负数)
各类型示例
// byte(8位) byte maxByte = (byte) ~(1 << 7); // 127 byte minByte = (byte) (1 << 7); // -128 // short(16位) short maxShort = (short) ~(1 << 15); // 32767 short minShort = (short) (1 << 15); // -32768 // int(32位) int maxInt = ~(1 << 31); // 2147483647 int minInt = 1 << 31; // -2147483648 // long(64位) long maxLong = ~(1L << 63); // 9223372036854775807L long minLong = 1L << 63; // -9223372036854775808L
注意:byte/short类型的移位操作默认会提升为int类型,所以需要强转回对应类型。
二、浮点数类型(float/double)
Java的浮点数遵循IEEE 754标准,结构为「符号位+指数位+尾数位」,无法直接对float/double做位运算,需借助整数类型中转,通过Float.intBitsToFloat/Double.longBitsToDouble将整数的二进制位直接解析为浮点数。
各类型示例
// float(32位) float maxFloat = Float.intBitsToFloat(0x7F7FFFFF); // 最大正浮点数 float minFloatNegative = Float.intBitsToFloat(0xFF7FFFFF); // 最小负浮点数(绝对值最大) float minFloatPositive = Float.intBitsToFloat(0x00000001); // 最小正浮点数 // double(64位) double maxDouble = Double.longBitsToDouble(0x7FEFFFFFFFFFFFFFL); // 最大正浮点数 double minDoubleNegative = Double.longBitsToDouble(0xFFEFFFFFFFFFFFFFL); // 最小负浮点数(绝对值最大) double minDoublePositive = Double.longBitsToDouble(0x0000000000000001L); // 最小正浮点数
位模式说明
- 最大正浮点数:符号位0,指数位全1,尾数位全1
- 最小负浮点数:符号位1,指数位全1,尾数位全1
- 最小正浮点数:符号位0,指数位全0,尾数位仅最低位为1
内容的提问来源于stack exchange,提问作者liamle
相关产品推荐
相关产品推荐

