使用十六进制数字表示法编写代码有什么意义?
What is the point of writing your code with hexadecimal notation for numbers?
前几天我刚刚在读一本编程书籍,其中谈到编写更好的代码。我进入了描述如何获取任何二进制数并将其转换为十六进制表示法的部分。我是编程的新手,我想知道以十六进制表示法甚至二进制文字格式写出数字的优势是什么,而不是仅使用普通的基数 10 或十进制系统?是为了速度目的吗?如果是这样,即使不是汇编代码,使用 C++ 的十六进制系统是否仍然有优势?
我发现按位运算符的结果用十六进制或二进制比用十进制更容易理解。
255 & 15 = 15
0xFF & 0x0F = 0x0F // Much easier to follow
当使用直接位操作时,它通常更加清晰,因为单个十六进制数字可以整齐地映射到 4 位。很容易看出 0x77
在二进制中等于 0111 0111
,但很难看出它们都等于 119。因此,如果你想使用它来仅删除位置 0 和4 无论出于何种原因,与 119 & i
.
相比,当您编写 0x77 & i
时更容易看出发生了什么
我认为输入 2
(基数 10)与输入 0x02
(基数 16)相比没有任何性能优势。两者都是常量。
但是,我发现 read/use 使用十六进制执行按位运算(例如,位掩码)的代码最方便。
人为的例子
#include <iostream>
bool isBit2Set(int value)
{
static const int BIT_2_MASK = 0x02;
return (value & BIT_2_MASK) != 0;
}
int main()
{
for (int i = 0; i < 9; ++i)
{
std::cout << i << " has bit 2 enabled? " << std::boolalpha << isBit2Set(i) << "\n";
}
return 0;
}
输出
0 has bit 2 enabled? false
1 has bit 2 enabled? false
2 has bit 2 enabled? true
3 has bit 2 enabled? true
4 has bit 2 enabled? false
5 has bit 2 enabled? false
6 has bit 2 enabled? true
7 has bit 2 enabled? true
8 has bit 2 enabled? false
前几天我刚刚在读一本编程书籍,其中谈到编写更好的代码。我进入了描述如何获取任何二进制数并将其转换为十六进制表示法的部分。我是编程的新手,我想知道以十六进制表示法甚至二进制文字格式写出数字的优势是什么,而不是仅使用普通的基数 10 或十进制系统?是为了速度目的吗?如果是这样,即使不是汇编代码,使用 C++ 的十六进制系统是否仍然有优势?
我发现按位运算符的结果用十六进制或二进制比用十进制更容易理解。
255 & 15 = 15
0xFF & 0x0F = 0x0F // Much easier to follow
当使用直接位操作时,它通常更加清晰,因为单个十六进制数字可以整齐地映射到 4 位。很容易看出 0x77
在二进制中等于 0111 0111
,但很难看出它们都等于 119。因此,如果你想使用它来仅删除位置 0 和4 无论出于何种原因,与 119 & i
.
0x77 & i
时更容易看出发生了什么
我认为输入 2
(基数 10)与输入 0x02
(基数 16)相比没有任何性能优势。两者都是常量。
但是,我发现 read/use 使用十六进制执行按位运算(例如,位掩码)的代码最方便。
人为的例子
#include <iostream>
bool isBit2Set(int value)
{
static const int BIT_2_MASK = 0x02;
return (value & BIT_2_MASK) != 0;
}
int main()
{
for (int i = 0; i < 9; ++i)
{
std::cout << i << " has bit 2 enabled? " << std::boolalpha << isBit2Set(i) << "\n";
}
return 0;
}
输出
0 has bit 2 enabled? false
1 has bit 2 enabled? false
2 has bit 2 enabled? true
3 has bit 2 enabled? true
4 has bit 2 enabled? false
5 has bit 2 enabled? false
6 has bit 2 enabled? true
7 has bit 2 enabled? true
8 has bit 2 enabled? false