美文网首页
Java无符号数据类型处理

Java无符号数据类型处理

作者: 逗笔小新 | 来源:发表于2020-04-30 14:53 被阅读0次

1、无符号与有符号对比:

​ 下面以Byte字节类型举例:

​ 有符号类型数据 符号位 数据位

1 1111111

​ 无符号类型数据 数据位
​ 11111111

​ 上述,无符号数据类型,二进制表示为11111111,十进制也就是255;如果是有符号数据,十进制则是 -1,这里为什么不是 -127呢?这里涉及到一个原码,反码,补码的问题。

​ 因为计算机存储的是以补码方式存储,其中原码、反码与补码关系如下:
​ (1)正数的补码 == 反码 == 原码
​ (2.1)负数的补码 == 反码(原码符号位不变,数据位取反) + 1
​ (2.2)负数的补码 == 原码,符号位不变,低位到高位,出现首个1比特位的高位全部取反(其实和2.1是一样)

​ 因此,在有符号数据中,补码1111 1111,原码则为1000 0001,也就是十进制 -1。

2、无符号转有符号:

​ 在 Java中并没有无符号数据类型,在跨平台通信的时候,就可能涉及无符号与有符号之间的转换。当然,就算不进行有无符号的转换,数据还是对的,但是在处理业务逻辑的时候,同一个数据却代表了不同含义。如上方,1111 1111,无符号平台表示的是十进制255,而 Java平台则表示 -1。

​ 一个byte字节8位,无符号取值范围 0 ~ 255,有符号取值范围 -128 ~ 127(1000 0000为-128),所以用 java的byte去存储无符号的byte,进行业务处理显然是不正确的。因此需要将无符号的byte存储为 java的 int类型。也就是转换成更大范围的数据存储。

当然,无符号int 也是类似,转化成 long存储使用。

/**
 * 无符号 byte类型转 int
 */
public static Integer byteToUnsignedInt(byte x) {
    return ((int) x) & 0xff;
}

/**
 * 无符号 short类型转 int
 */
public static int shortToUnsignedInt(short x) {
    return ((int) x) & 0xffff;
}

/**
 * 无符号 int类型转 long
 */
public static long intToUnsignedLong(int x) {
    return ((long) x) & 0xffffffffL;
}

例子:

byte num = -0b1111111;    // -127   补码存储 1000 0001
System.out.println(JavaUnsignedDataUtil.byteToUnsignedInt(num));    // 忽略符号位
// 输出打印输出 129,存储在 int当中

3、有符号转无符号:

​ 这里具体转换还需要看具体规则,如果按照 2中的转换规则,这里将有符号转回无符号则用Java的强制类型转换即可。

​ 例如:(byte)int

相关文章

  • Class类文件结构

    按照Java虚拟机规范的规定,Class文件结构只有两种数据类型:无符号数和表 无符号数无符号数属于基本的数据类型...

  • Java无符号数据类型处理

    1、无符号与有符号对比: ​ 下面以Byte字节类型举例: ​ 有符号类型数据 符号位 ...

  • Java数据类型精讲

    原文链接 Java数据类型精讲 JAVA中数值的特点 Java中的数值都是有符号的,不存在无符号的数,它们的取值范...

  • (2) 面试

    java基本的数据类型有几种,无符号与有符号整型有什么区别?8种4类:逻辑类型:boolean;字符类型:char...

  • Java 核心技术(卷一)笔记

    1.Java是一种强类型语言 在JAVA中,所有的数据类型所占的字节数量与平台无关。Java没有任何无符号(uns...

  • MySQL学习-数据定义语言(DDL)二之数据类型

    前言:MySQL中的数据类型 一、整型 特点:① 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要...

  • [从零开始学Hive]Hive数据类型&DDL&DML

    Hive数据类型 基本数据类型 Hive数据类型Java数据类型长度TINYINTbyte1byte有符号整数SM...

  • go的基础类型声明与使用

    数据类型 数据类型可分为两种: 基本数据类型 整型 整型分为两类:有符号、无符号 有符号:int8、int16、i...

  • swift 数据类型

    标签(空格分隔): swift 数据类型zuoyebuluo 整形 1. Integer 有符号 无符号 int ...

  • BigInteger实现&的位运算操作

    问题来源:下位机数据对接 数据库的数据类型为bigint和无符号bigInt分别对应java的Long类型和Big...

网友评论

      本文标题:Java无符号数据类型处理

      本文链接:https://www.haomeiwen.com/subject/memzwhtx.html