`
- 浏览:
802587 次
- 性别:
- 来自:
上海
-
原码, 反码和补码详细知识参考:
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
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
LabVIEW程序,功能:将4字节的unsigned char输入组合成1个32-bit int值,若输入字节数不等于4则报错。
本文档主要探讨了如何在Java中实现这两种数据类型的转换,包括有符号和无符号的转换。 首先,Integer在Java中占用4个字节(32位),其中最高位作为符号位。如果最高位是1,表示这是一个负数;如果是0,则表示正数。...
1. **byte**: 在C++中,`byte`通常等同于`unsigned char`,它是一个无符号的8位整数,取值范围是0到255。 2. **WORD**: 这是Windows API中的一个定义,通常在`windef.h`头文件中声明,它是一个无符号的16位整数,...
在C++中,Byte是一个无符号字符类型,在C#中,System.Byte是一个无符号字节类型。 3. SHORT(short) ---- System.Int16 在C++中,SHORT是一个短整型,在C#中,System.Int16是一个短整型。 4. WORD(unsigned short)...
例如,`htons()`、`htonl()`、`ntohs()` 和 `ntohl()` 分别用于将短整型(short)、无符号短整型(unsigned short)、长整型(long)和无符号长整型(unsigned long)从主机字节顺序转换为网络字节顺序,以及反向...
VB中的Integer数据类型通常占用2字节,与C中的short或int相当,而VB的UInteger或Long数据类型可能对应C中的无符号整数(unsigned int)或长整数(long)。因此,"2字节装换为1个整数"可能指的是将两个VB的Integer...
| `unsigned char *` | `[MarshalAs(UnmanagedType.LPArray)] byte[]` / `IntPtr` | 用于数组指针转换,使用`MarshalAs`指定属性以匹配C++数组 | | `char *` | `string` | 用于字符串指针转换 | | `void *` | `...
在`unsigned4BytesToInt`方法中,它接受一个`byte`数组和起始位置,将连续的4个字节组合成一个32位的无符号整数: ```java public static long unsigned4BytesToInt(byte[] buf, int pos) { // ... return ((long...
在探讨VC++中的BYTE类型时,我们首先需要明确,BYTE是一种基本数据类型,在C++标准库中并未直接定义,但在Microsoft Visual C++(VC++)等特定编译器环境下,BYTE通常被定义为unsigned char类型,即无符号的8位整数...
- 数据类型分为有符号(如`signed int`)和无符号(如`unsigned int`)。在二进制表示中,有符号数据会用最高位(符号位)表示正负,而无符号数据则不考虑这一位。例如,`signed char`可以表示-128到127的整数,而`...
`Byte`是Delphi中的8位无符号整数类型,与C/C++中的`BYTE`或`unsigned char`相对应。注意这里提到的`BYTE`在某些C/C++环境中可能不是标准类型,而`unsigned short`则是一个不常见的选择,通常`unsigned char`更为...
需要注意的是,在 Java 语言中没有任何无符号 unsigned 类型。 二、浮点数类型 Java 语言中有两种浮点数类型:float 和 double。float 占 4 字节空间,double 占 8 字节空间。在 Java 语言中,直接写出的浮点数被...
在多字节的数据处理中,内核提供了转换函数,如`cpu_to_le32`和`le32_to_cpu`,用于在CPU字节序与小端字节序之间转换32位无符号整数。 ### 数据对齐 数据对齐在内存管理中是一个重要的概念,涉及到数据存储时的...
- `UINT8` 是无符号的8位整数,C#中可以使用 `byte` 类型映射,但调用前需要先创建一个 `byte` 变量。 在实际使用中,应确保在C#中为每个C++的数据类型选择正确的映射,并且要充分考虑内存管理和数据对齐问题,以...
1. `handle` 和 `HWND` 在C#中都转换为 `IntPtr`,它用于表示无符号整型指针。 2. `char *` 在C#中通常转换为 `string`,用于表示文本字符串。 3. `int *` 和 `int &` 在C#中转换为 `ref int`,这允许按引用传递整型...
UNSIGNED 表示该整数为无符号类型。在Java中,该类型被映射为 `Long` 类型。 ##### 6. TINYINT (小整数) **显示长度:** 3 **数据库类型:** TINYINT UNSIGNED **JAVA类型:** `java.lang.Integer` **JDBC类型:** ...
- `unsigned int`(C++):32位无符号整数,在C#中对应`uint`。 - `COLORREF`(C++):用于表示颜色值的32位无符号整数,在C#中对应`uint`。 2. **浮点型数据**: - `float`(C++):32位浮点数,在C#中对应`...
除此之外,还有无符号类型(如`unsigned int`)和短整型(如`short int`)等变体。 Windows API中的一些常见数据类型包括: 1. **BOOL**: 在Windows中,`BOOL`类型通常表示逻辑值,类似于C/C++的`int`,但其值为`...
- `unsigned char`在C++中表示无符号字符类型,而在C#中则对应于`System.Byte`,两者都是8位无符号整数。 - **SHORT (short) - System.Int16** - `short`在C++中代表16位带符号整数,C#中的`System.Int16`同样是...
- **Byte (Delphi)**:映射到C++的`BYTE`或`unsigned short`,表示8位无符号整数。 - **SmallInt (Delphi)**:在C++中表现为`short`,用于16位有符号整数。 - **Word (Delphi)**:对应C++中的`unsigned short`,是16...