C# 的 int32 字面量只能存储在 long 数据类型中。

5

我正在为一场非常棘手的C#考试做准备,做题时遇到了以下代码:

 uint zzz = -12u;

-12u 被识别为 System.Uint32 字面量,但它只能存储在 long 类型的变量中。为什么会这样?


5
你知道 u 代表什么吗? - Mark Byers
3
我猜是因为 unsigned int 应该是无符号的,对吗? - Phil Gan
2
提示:"-12u被认为是System.Uint32"是不正确的。正确的说法应该是"12u被认为是System.Uint32"。 - vcsjones
无符号意味着只允许非负值。-12在uint变量中根本无法表示。 - Daniel Hilgarth
我知道 u 代表什么,我正在尝试一些不太可能的情况。U 代表无符号,而 -12 显然是负数。但是,当将 -12 的二进制表示转换为 uint 十进制数时,可以完美地适合 uint。但出于某种原因,我无法将该值存储在 uint 类型的变量中。 - Chris Nickson
2个回答

12
它所做的是将无符号整数12尝试转换为负值(使用-),这需要将其转换为能处理负数的类型,因为无符号整数无法处理负数。
由于它是一个无符号整数,它具有超出int范围的可能值,因此需要将其转换为长整型。

1
是的,如果您查看整数文字规范,您会发现减号不是文字的一部分,因此它创建了一个uint,然后在取反时必须将其扩展为long - Rawling

0

因为 u 用于无符号整数类型
为了处理负号,需要将其转换为长整型数据
-12u 是带符号整数数据类型,并且为了将其存储在 unsigned 类型中,使用了 long 数据类型


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接