1

早上好,下午或晚上,

预警:我知道这听起来像是我试图进行过早的优化,但我向你保证我不是。也就是说,如果您想尽您的能力而不向我指出有关“过早优化”的链接,请回答这个问题。

使用以 10 为基数和以 16 为基数的常量,是否可以注意到大量重复操作的性能差异?我看到人们在写

int b = a >> 0x1f;

很多而不是

int b = a >> 31;

这表明他们要么来自 C/C++ 背景,要么他们可能认为运算执行得更快(而且我不仅在谈论按位运算)。C# 编译器不是将所有常量都转换为相同的基数吗?或者在编写代码时使用基数 16 比基数 10 有什么优势吗?

非常感谢,

4

6 回答 6

4

这没有什么区别,因为它们会被编译成相同的东西。

它确实使二进制操作的代码更具可读性,因为使用十六进制可以更容易地读取位。从十进制 -> 二进制转换在精神上要困难得多。

0x1f 将是:

1 -> 0001

+

f -> 1111

= 00011111

于 2011-03-14T14:49:17.467 回答
1

这两个语句与编译器相同。这只是用户偏好的问题。

于 2011-03-14T14:49:49.510 回答
0

唯一的优点是它对于习惯于使用十六进制工作的人来说更具可读性。整数是一个整数,无论​​是用十进制文字表示还是用十六进制表示。

于 2011-03-14T14:50:13.997 回答
0

我看到的唯一优点是按位运算通常在十六进制中更有意义。然而,移位操作(在我看来)没有。

于 2011-03-14T14:51:05.900 回答
0

它们在 IL 中确实被解释为完全相同的东西,第一个对于大多数人来说更难阅读。因此,十六进制方法没有太大优势。

于 2011-03-14T14:51:09.100 回答
0

数字是数字,十进制或十六进制只是以人类可以阅读的方式在屏幕上写入数字的表示。所以完全没有区别,在 c/c++ 中也没有。

于 2011-03-14T14:51:36.777 回答