【问题标题】:Using Decimal or Hexadecimal Bases in .NET在 .NET 中使用十进制或十六进制基数
【发布时间】:2011-07-15 02:00:29
【问题描述】:
早上好,下午好,晚上好,
预警:我知道这听起来像是我试图进行过早的优化,但我向你保证我不会。也就是说,如果您想尽自己最大的能力而不向我指出有关“过早优化”的链接,请回答这个问题。
使用以 10 为基数和以 16 为基数的常量,是否可以注意到大规模重复操作的性能差异?我看到人们在写作
int b = a >> 0x1f;
很多而不是
int b = a >> 31;
这表明他们要么来自 C/C++ 背景,要么他们可能认为运算执行得更快(而且我说的不仅仅是按位运算)。 C# 编译器不是将所有常量都转换为相同的基数吗?或者在编写代码时使用基数 16 比基数 10 有什么优势吗?
非常感谢,
【问题讨论】:
标签:
c#
.net
decimal
hex
numerics
【解决方案1】:
数字是数字,十进制或十六进制只是以人类可以阅读的方式在屏幕上写入数字的表示。所以完全没有区别,在 c/c++ 中也没有。
【解决方案2】:
它们在 IL 中确实被解释为完全相同的东西,而第一个对于大多数人来说更难阅读。所以 hex 方法并没有太大的优势。
【解决方案3】:
我看到的唯一优势是按位运算通常在十六进制中更有意义。然而,shift op 并没有(在我看来)。
【解决方案4】:
唯一的优点是它对于习惯使用十六进制的人来说更具可读性。整数是一个整数,无论是用十进制字面量表示还是用十六进制表示。
【解决方案6】:
这没有什么区别,因为它们会被编译成相同的东西。
它确实使二进制操作的代码更具可读性,因为使用十六进制可以更容易地读取位。从十进制 -> 二进制转换在心理上要困难得多。
0x1f 将是:
1 -> 0001
+
f -> 1111
= 00011111