0x0和有什么区别0x00?0xF和有什么区别0xFFFFFFFF?这些值是否占用不同的内存量?如何学习正确阅读和理解,以及使用十六进制数字系统?我的项目中有很多使用位掩码的工作,有时我不明白人们如何选择、如何录制以及录制什么?为什么有时0xF有时0xFF。我已经阅读了足够多的材料来了解它是如何工作的,但我仍然不明白如何正确地学习如何使用位标志,也不明白应该选择什么以及这些选择之间有什么区别。
图书馆的例子OpenGL:
#define GL_DEPTH_BUFFER_BIT 0x00000100
#define GL_STENCIL_BUFFER_BIT 0x00000400
无法弄清楚为什么这两个标志不同?我认为这完全取决于节拍的位置。
由于您没有指定特定的编程语言,并且 Java 在您的个人资料中出现的频率更高,因此我的回答中将指的是 Java。
整型字面量,如果没有后缀
L(或l)有 typeint,也就是说,它们在内存中占用 4 个字节。因此,无论整数十六进制字面量是
0xF, 还是0xFFFFFFFF,它都将占用4字节,即占用的内存大小相同。另一方面,很明显这两个整数文字是作为示例给出的。有不同的含义。
同样明显的是,这两个整数十六进制文字具有相同的值
0x0,0x00即 0。(注意:有趣的是,尽管给定的两个整数文字
0和00,在 Java 中具有相同的值。即零,但是第一个整数文字被认为是十进制整数文字,第二个整数文字是八进制整数文字。 )在位运算中使用十六进制文字来提取数字的各个位或检查是否设置了位通常很有用。
例如,这个字面
0xF量可以用来提取某个数字的四位,而这个字面0xFF量可以方便地用来提取一个数字的低字节。例如,
程序输出到控制台:
编辑:
在 C++ 中,整数字面量后缀有更多含义。可以使用以下后缀:
U(u), L(l) и LL(ll)以及最后两个后缀与后缀的组合U(u)。也就是说,C++ 有更多种类的整数类型。
不带后缀的十六进制字面量的特定整数类型由其值决定。也就是说,选择第一个可以包含给定十六进制文字值的类型。
这是一个示例 C 演示程序(实际上,它可能完全用 C++ 重写),它显示了对十六进制文字的一些按位运算。
该程序定义了一个以相反顺序写入数字值的函数。
程序输出到控制台:
有时,使用二进制文字代替十六进制文字更方便,它看起来更具描述性。
例如,十六进制文字
0x3可以重写为二进制文字0b11,其中两个最低有效位设置为 1 更加明显。关于您关于这些标志的问题
那么您只需阅读描述它们的 OpenGL 文档。