在阅读MongoDB驱动程序代码时。我注意到一个枚举,其所有值都是十六进制。我之前见过这个,但从未问过自己为什么十六进制是最好的选择。现在我正在努力进一步了解自己并理解这段代码以及MongoDB进入hhexadecimal路由而不是整数的原因。任何帮助将不胜感激。
以下是我所指的代码:
https://github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB.Bson/ObjectModel/BsonType.cs
代码段:
namespace MongoDB.Bson
{
[Serializable]
public enum BsonType
{
EndOfDocument = 0x00,
Double = 0x01,
String = 0x02,
Document = 0x03,
Array = 0x04,
Binary = 0x05,
Undefined = 0x06,
ObjectId = 0x07,
Boolean = 0x08,
DateTime = 0x09,
Null = 0x0a,
RegularExpression = 0x0b,
JavaScript = 0x0d,
Symbol = 0x0e,
JavaScriptWithScope = 0x0f,
Int32 = 0x10,
Timestamp = 0x11,
Int64 = 0x12,
MinKey = 0xff,
MaxKey = 0x7f
}
}
答案 0 :(得分:1)
在一般情况下,如果
,则十六进制枚举常量是合理的除非其中一个是真的,否则他们通常是一个坏主意,往往是一个非常糟糕的主意。我不熟悉Mongo源代码,但我认为这里给出的片段没有任何理由。
最可能的原因是程序员的习惯。有些人似乎只是用十六进制思考。我们大多数人都尽力不去。
答案 1 :(得分:-1)
十六进制系统可以用与十进制相同的方式表示负数:-2A表示-4210。
但是,我们更喜欢使用十六进制表示法来表示处理器中使用的确切位模式,因此十六进制数字序列可以表示有符号甚至是浮点值。这样,负数-4210可以在32位CPU寄存器(二进制补码)中写为FFFF FFD6,如32位FPU寄存器中的C228 0000或64位FPU寄存器中的C045 0000 0000 0000 (在IEEE浮点标准中)