在.NET中使用十进制或十六进制基

时间:2011-03-14 14:45:39

标签: c# .net decimal hex numerics

早上好,下午或晚上,

预警:我知道这可能听起来像是在尝试过早优化,但我向你保证我不是。既然如此,如果你想尽力而为,请不要指向我关于“过早优化”的链接,请回答这个问题。

是否有可能注意到使用以十进制和十六进制编写的常量进行大规模重复操作的性能差异?我看到有人写作

int b = a >> 0x1f;

很多,而不是

int b = a >> 31;

这表明它们来自C / C ++背景,或者它们可能认为操作执行得更快(我不是只谈论按位操作)。是不是所有常量都被C#编译器转换为同一个基础?或者在编写代码时使用base 16 over base 10会有什么优势吗?

非常感谢,

6 个答案:

答案 0 :(得分:4)

它们没有任何区别,因为它们会被编译成同样的东西。

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

0x1f将是:

1 - > 0001

+

f - > 1111

= 00011111

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我看到的唯一优势是按位操作通常在十六进制中更有意义。但是,转移操作(不在我看来)。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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