【发布时间】:2018-03-09 16:08:33
【问题描述】:
这样编码有什么区别吗:
int something = 255;
或者这个:
int something = 0xff;
另外:如果这个变量稍后被转换为byte,它仍然是一样的吗?
【问题讨论】:
-
为什么会有差异?它们都是相同值的整数,只是使用不同的表示进行初始化。因此它们将转换为相同的字节值。通过声明两者并比较相等性,您可以很容易地看到这一点。
-
数字文字
255和0xff之间的唯一区别是它们是同一数字的两种不同表示形式。但情况并非总是如此。例如,数字文字0xffffffff仍然是 32 位值,因此可以放入 int 中。但是,十六进制值被视为无符号值,因此 ``0xffffffff' 不能在不强制转换的情况下分配给 int。有趣的是,如果你使用var v1 = 0xff; var v2 = 0xffffffff;,你会注意到 v1 是 int 类型,而 v2 是 uint 类型;所以整个十六进制表示法有点上下文相关(1/2) -
(2/2) 具有隐含的数据类型(即,使用
var赋值),具体取决于十六进制值是否适合给定(最小)类型。但是,十六进制数字文字的最小隐含类型是 32 位类型,例如 int/uint。不确定这是 C# 规范的规则还是只是 Visual Studio 的 C# 编译器的选择... -
更新我上一条评论:根据 C# 规范,整数文字(包括十六进制表示法)只能是 int、uint、long 和 ulong 类型。
-
@BrootsWaymb :我没有看到任何差异。我问是因为我担心我可能错过了什么。在我们的代码库中,有人在这两种格式之间切换很有趣,显然没有充分的理由。 ://