可以';t将32位十六进制值分配给整数

本文关键字:十六进制 分配 整数 32位 可以 | 更新日期: 2023-09-27 18:27:44

首先,这个问题有相关的帖子:为什么Int32的最大值是0x7FFFFFFF?

然而,我想知道为什么十六进制值总是被视为无符号量。

请参阅以下片段:

byte  a = 0xFF;               //No error (byte is an unsigned type).
short b = 0xFFFF;             //Error! (even though both types are 16 bits).
int   c = 0xFFFFFFFF;         //Error! (even though both types are 32 bits).
long  d = 0xFFFFFFFFFFFFFFFF; //Error! (even though both types are 64 bits).

错误的原因是,无论十六进制值存储为何种数据类型,它们都始终被视为无符号值。因此,对于所描述的数据类型,该值为"过大"


例如,我期望:

int c = 0xFFFFFFFF;

存储值:

-1

而不是价值:

4294967295

仅仅因为int签名的类型。


那么,为什么十六进制值总是被视为无符号的,即使符号类型可以通过用于存储它们的数据类型推断出来呢?

如何在不使用ushortuintulong的情况下将这些位存储到这些数据类型中?

特别是,考虑到我不能使用更大的签名数据类型,我如何为long数据类型实现这一点?

可以';t将32位十六进制值分配给整数

实际情况是,文本本质上是类型化的。0.1double,这就是为什么你不能说float f = 0.1。您可以double强制转换为floatfloat f = (float)0.1),但可能会失去精度。类似地,文字0xFFFFFFFF本质上是uint。您可以将其强制转换为int,但这是在之后的,编译器已将其解释为uint。编译器不使用您分配给它的变量来计算它的类型;它的类型由它的文字类型定义。

它们被视为无符号数字,因为这就是语言规范所说的