`
darrenzhu
  • 浏览: 804677 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

无符号字节类型,unsigned byte 转换

    博客分类:
  • Java
阅读更多
原码, 反码和补码详细知识参考:
http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

要点:
计算机内存中存储的是带符号位的二进制补码。

十进制字面常量具有一个很好的属性,即所有的十进制字面常量都是正的,而十六进制或是八进制字面常量并不具有着个属性。更进一步说,就是一个十六进制和八进制的字面常量无需显示的(-)负号就可以表示负的数值,而十进制的负数是明确需要一个负号来表示的。

int a = 10;
int b = -10;
int c = 0xAAAAAAAA;
如上所示,a和b是用十进制字面常量赋的值,我们很容易区别a是正数,b是负数.但是c是用十六进制字面常量赋的值,System.out.print(c)为-1431655766,所以c是一个负数,c的正负并没有显示的负号来表达。

java中的byte类型是signed有符号的,范围-128 - 127, 如果需要输出或比较无符号的byte,怎么办?

byte a = 0xAA 编译报错,因为0xAA是一个十六进制字面常量,它代表的值是十进制的170,不在-128-127之间,所以要强制转换。byte a = (byte)0xAA 就ok了。但是此时的System.out.print(a)为-86,如果希望System.out.print(a)为170,咋办?
System.out.print(a & 0xFF)即可,a & 0xFF是一个int型的,而且符号为正。


如果希望大印出0xAA,怎么办,可以用如下的方法
public static String fromUnsignedByteToHexString(byte b) {
return "0x" + Integer.toHexString(b & 0xFF).toUpperCase();
}

这里有一个关键点,虽然byte a = (byte)0xAA打印出来的是-86,但其实计算机内存中存储的确实正确的无符号的二进制。0xAA是int型的,java中占4个字节
十六进制表示
00 00 00 AA
强制转换成byte类型,占一个字节为
AA
AA用无符号解析出来就是170
分享到:
评论

相关推荐

    LabVIEW,字节数组至数值转换

    LabVIEW程序,功能:将4字节的unsigned char输入组合成1个32-bit int值,若输入字节数不等于4则报错。

    学习文档_JAVA中Integer和Byte转换.doc

    本文档主要探讨了如何在Java中实现这两种数据类型的转换,包括有符号和无符号的转换。 首先,Integer在Java中占用4个字节(32位),其中最高位作为符号位。如果最高位是1,表示这是一个负数;如果是0,则表示正数。...

    byte-TO-WROD.zip_byte转换成word

    1. **byte**: 在C++中,`byte`通常等同于`unsigned char`,它是一个无符号的8位整数,取值范围是0到255。 2. **WORD**: 这是Windows API中的一个定义,通常在`windef.h`头文件中声明,它是一个无符号的16位整数,...

    C++和C#的类型转换

    在C++中,Byte是一个无符号字符类型,在C#中,System.Byte是一个无符号字节类型。 3. SHORT(short) ---- System.Int16 在C++中,SHORT是一个短整型,在C#中,System.Int16是一个短整型。 4. WORD(unsigned short)...

    Host-byte-order-to-network-.rar_byte order_doc

    例如,`htons()`、`htonl()`、`ntohs()` 和 `ntohl()` 分别用于将短整型(short)、无符号短整型(unsigned short)、长整型(long)和无符号长整型(unsigned long)从主机字节顺序转换为网络字节顺序,以及反向...

    Byte2ToInteger.rar

    VB中的Integer数据类型通常占用2字节,与C中的short或int相当,而VB的UInteger或Long数据类型可能对应C中的无符号整数(unsigned int)或长整数(long)。因此,"2字节装换为1个整数"可能指的是将两个VB的Integer...

    C# 与 C++ 数据类型比较及结构体转换

    | `unsigned char *` | `[MarshalAs(UnmanagedType.LPArray)] byte[]` / `IntPtr` | 用于数组指针转换,使用`MarshalAs`指定属性以匹配C++数组 | | `char *` | `string` | 用于字符串指针转换 | | `void *` | `...

    java byte数组与int,long,short,byte的转换实现方法

    在`unsigned4BytesToInt`方法中,它接受一个`byte`数组和起始位置,将连续的4个字节组合成一个32位的无符号整数: ```java public static long unsigned4BytesToInt(byte[] buf, int pos) { // ... return ((long...

    VC++中BYTE

    在探讨VC++中的BYTE类型时,我们首先需要明确,BYTE是一种基本数据类型,在C++标准库中并未直接定义,但在Microsoft Visual C++(VC++)等特定编译器环境下,BYTE通常被定义为unsigned char类型,即无符号的8位整数...

    二进制与各种类型的数据转换.docx

    - 数据类型分为有符号(如`signed int`)和无符号(如`unsigned int`)。在二进制表示中,有符号数据会用最高位(符号位)表示正负,而无符号数据则不考虑这一位。例如,`signed char`可以表示-128到127的整数,而`...

    Delphi 与 C/C++ 数据类型对照表

    `Byte`是Delphi中的8位无符号整数类型,与C/C++中的`BYTE`或`unsigned char`相对应。注意这里提到的`BYTE`在某些C/C++环境中可能不是标准类型,而`unsigned short`则是一个不常见的选择,通常`unsigned char`更为...

    实验Java的基本数据类型和作业流程控制结构.doc

    需要注意的是,在 Java 语言中没有任何无符号 unsigned 类型。 二、浮点数类型 Java 语言中有两种浮点数类型:float 和 double。float 占 4 字节空间,double 占 8 字节空间。在 Java 语言中,直接写出的浮点数被...

    Linux内核的数据类型.pdf

    在多字节的数据处理中,内核提供了转换函数,如`cpu_to_le32`和`le32_to_cpu`,用于在CPU字节序与小端字节序之间转换32位无符号整数。 ### 数据对齐 数据对齐在内存管理中是一个重要的概念,涉及到数据存储时的...

    c#调c++dll参数转换 (2).docx

    - `UINT8` 是无符号的8位整数,C#中可以使用 `byte` 类型映射,但调用前需要先创建一个 `byte` 变量。 在实际使用中,应确保在C#中为每个C++的数据类型选择正确的映射,并且要充分考虑内存管理和数据对齐问题,以...

    C#接口函数参数类型转换一览表

    1. `handle` 和 `HWND` 在C#中都转换为 `IntPtr`,它用于表示无符号整型指针。 2. `char *` 在C#中通常转换为 `string`,用于表示文本字符串。 3. `int *` 和 `int &` 在C#中转换为 `ref int`,这允许按引用传递整型...

    MySql于Java数据类型对应列表

    UNSIGNED 表示该整数为无符号类型。在Java中,该类型被映射为 `Long` 类型。 ##### 6. TINYINT (小整数) **显示长度:** 3 **数据库类型:** TINYINT UNSIGNED **JAVA类型:** `java.lang.Integer` **JDBC类型:** ...

    c++和c#数据类型对照

    - `unsigned int`(C++):32位无符号整数,在C#中对应`uint`。 - `COLORREF`(C++):用于表示颜色值的32位无符号整数,在C#中对应`uint`。 2. **浮点型数据**: - `float`(C++):32位浮点数,在C#中对应`...

    windows数据类型

    除此之外,还有无符号类型(如`unsigned int`)和短整型(如`short int`)等变体。 Windows API中的一些常见数据类型包括: 1. **BOOL**: 在Windows中,`BOOL`类型通常表示逻辑值,类似于C/C++的`int`,但其值为`...

    C++C#数据类型对照表

    - `unsigned char`在C++中表示无符号字符类型,而在C#中则对应于`System.Byte`,两者都是8位无符号整数。 - **SHORT (short) - System.Int16** - `short`在C++中代表16位带符号整数,C#中的`System.Int16`同样是...

    c++_VC++与Delphi变量类型对应关系.doc

    - **Byte (Delphi)**:映射到C++的`BYTE`或`unsigned short`,表示8位无符号整数。 - **SmallInt (Delphi)**:在C++中表现为`short`,用于16位有符号整数。 - **Word (Delphi)**:对应C++中的`unsigned short`,是16...

Global site tag (gtag.js) - Google Analytics