Java中int或long等整型数值如何转换为无符号整数 - Go语言中文社区

Java中int或long等整型数值如何转换为无符号整数


Java8 为 Integer、Long包装类增加了如下方法:

  • static  String  toUnsignedString(int/long i):将指定int或long型整数转换为无符号整数对应的字符串。

  • static  String  toUnsignedString(int/long i, int radix):将指定int或long型整数转换为指定进制的无符号整数对应的字符串。

  • static  xxx  parseUnsignedXxx(String s):将指定字符串解析为无符号整数。当调用类为Integer时,xxx 代表 int。

  • static  xxx  parseUnsignedXxx(String s, int radix):将指定字符串按指定进制解析为无符号整数。调用类为Integer时则xxx代表int

  • static int compareUnsigned(xxx x, xxx y):将x,y两个整数转换为无符号整数后比较大小。调用类为Integer时则xxx代表int。

  • static long divideUnsigned(long dividend, long divisor):将x、y两个整数转换为无符号整数后计算它们相除的商。

  • static long remainderUnsigned(long dividend, long divisor):将x、y两个整数转换为无符号整数后计算它们相除的余数。

此外,java8还为Byte、Short增加了toUnsigneddInt(xxx x)、toUnsignedLong(yyy  x)两个方法,这两个方法用于将指定byte或short类型的变量或值转换成无符号的int 或 long 值。

 

 

java中整数数值转无符号整数应用实例:

{

    //将byte类型的-3转换为无符号整数
    byte b = -3;
    System.out.println("byte类型的-3对应的无符号整数:" + Byte.toUnsignedInt(b));  //输出253
    

    //指定使用16进制解析无符号整数
    int val = Integer.parseUnsignedInt("ab",16);
    System.out.println(val);   //输出171


    //将-12转换为无符号int型,然后转换为16进制的字符串
    System.out.println(Integer.toUnsignedString(-12,16));   //输出 fffffff4


    //将两个数转换为无符号整数后相除
    System.out.println(Integer.divideUnsigned(-2,3));   


    //将两个数转换为无符号整数相除后求余
    System.out.println(Integer.remainderUnsigned(-2,7));  

 

 

byte值-3转换为无符号整数为何是256

        无符号整数最大的特点是最高位不再被当成符号位。

        在计算机里,数字都是用二进制方式以补码形式进行存储的。以byte类型的 -3 为例,byte整数占内存为一个字节,也就是八位,即八位二进制数。

        可得 -3 的原码为 10000011, 反码为 11111100(符号位不变其余取反), 补码为 11111101 (反码+1)

        因为要求是转为无符号整数,所以符号位将不再是符号位而作为数值位,所以由 11111101 算得 -3 的无符号整数为 253  

 

 

什么是无符号正式

简介:

计算机中的整数分为两类:不带符号位的整数(也称为无符号整数),此类整数一定是正整数;带符号位的整数,此类整数可以表示正整数,又可以表示负整数。

无符号整数常用于表示地址、索引等正整数,它们可以是8位、16位、32位、64位甚至更多。8个二进制表示的正整数其取值范围是0~255( -1),16位二进制位表示的正整数其取值范围是0~65535( -1),32位二进制位表示的正整数其取值范围是0~  -1。

 

有符号和无符号的差别:

int是有符号的,unsigned是无符号的。

它们所占的字节数其实是一样的,但是有符号的需要安排一个位置来表达我这个数值的符号,因此说它能表示的绝对值就要比无符号的少一半。举个例子,我们有一个1个 [1]  字节的整数(虽然这种类型不存在),那么无符号的就是这样:00000000~11111111 这个就是无符号的范围。

一个字节是8位, 有符号的数,因为第一个位要用来表示符号,那么就只剩下7个位置可以用来表示数了0000000~1111111因为有符号,所以还可以表示范围:-1111 111 ~ +1111 111。

 

 

 

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/CrownP/article/details/88834275
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:54:17
  • 阅读 ( 1347 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢