可以';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
是签名的类型。
那么,为什么十六进制值总是被视为无符号的,即使符号类型可以通过用于存储它们的数据类型推断出来呢?
如何在不使用ushort
、uint
和ulong
的情况下将这些位存储到这些数据类型中?
特别是,考虑到我不能使用更大的签名数据类型,我如何为long
数据类型实现这一点?
实际情况是,文本本质上是类型化的。0.1
是double
,这就是为什么你不能说float f = 0.1
。您可以将double
强制转换为float
(float f = (float)0.1
),但可能会失去精度。类似地,文字0xFFFFFFFF本质上是uint
。您可以将其强制转换为int
,但这是在之后的,编译器已将其解释为uint
。编译器不使用您分配给它的变量来计算它的类型;它的类型由它的文字类型定义。
它们被视为无符号数字,因为这就是语言规范所说的