- Java数据类型简介
- 原始数据类型
- 包装
- 使用
- 字符串
- 数组
Java无符号数据类型
Java不支持无符号数据类型。byte
,short
,int
和long
都是有符号数据类型。对于有符号数据类型,值范围的一半存储正数,一半用于负数,因为一个位用于存储有符号值的符号。
例如,一个字节需要8
位; 其范围是-128``到127
。如果只在一个字节中存储正数,则其范围将为0
到255
。
Java在包装器类中有一些静态方法,以支持处理带符号值中的位的操作,就像它们是无符号整数一样。
Byte
类包含两个静态方法:
int toUnsignedInt(byte x) long toUnsignedLong(byte x)
这些方法将指定的字节参数转换为int
和long
,就像该字节存储为无符号值一样。如果指定的字节为零或正,则转换的int
和long
值将相同。如果参数是负数,则转换的数字将为2^8 + x
。
例如,对于输入-10
,返回的值将是2^8 +(-10)
,也就是246
。负数以2
的补码形式存储。 值-10
将被存储为11110110
。最高有效位1
表示它是一个负数。
前7位(1110110
)的2
的补码是001010
,十进制为10
。
如果考虑实际位11110110
,在一个字节中作为无符号整数,其值为246(128 + 64 + 32 + 16 + 0 + 4 + 2 + 0)
。
示例-1
以下代码显示了如何将存储在字节中的值作为无符号整数:
public class Main { public static void main(String[] args) { byte b = -10; int x = Byte.toUnsignedInt(b); System.out.println("Signed value in byte = " + b); System.out.println("Unsigned value in byte = " + x); } }
上面的代码生成以下结果。
Signed value in byte = -10 Unsigned value in byte = 246
实例-2
Integer
类包含以下静态方法以支持无符号运算和转换:
int compareUnsigned(int x, int y) int divideUnsigned(int dividend, int divisor) int parseUnsignedInt(String s) int parseUnsignedInt(String s, int radix) int remainderUnsigned(int dividend, int divisor) long toUnsignedLong(int x) String toUnsignedString(int i) String toUnsignedString(int i, int radix)
以下代码显示了对两个int
变量的除法运算,如同它们的位表示无符号值一样:
public class Main { public static void main(String[] args) { // Two negative integer values int x = -1; int y = -2;// // Performs signed division System.out.println("Signed x = " + x); System.out.println("Signed y = " + y); System.out.println("Signed x/y = " + (x / y)); // Performs unsigned division by treating x and y holding unsigned values long ux = Integer.toUnsignedLong(x); long uy = Integer.toUnsignedLong(y); int uQuotient = Integer.divideUnsigned(x, y); System.out.println("Unsigned x = " + ux); System.out.println("Unsigned y = " + uy); System.out.println("Unsigned x/y = " + uQuotient); } }
上面的代码生成以下结果。
Signed x = -1 Signed y = -2 Signed x/y = 0 Unsigned x = 4294967295 Unsigned y = 4294967294 Unsigned x/y = 1
上一篇:Java布尔包装类
下一篇:Java自动装箱和拆箱
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
扫描二维码
程序员编程王