1
screen = SDL_SetVideoMode(1000,1000,32, SDL_HWSURFACE | SDL_FULLSCREEN);

|做什么SDL_HWSURFACE | SDL_FULLSCREEN?(我试过用谷歌搜索,但谷歌不接受特殊字符..)

4

4 回答 4

7

当可以为给定的函数调用设置许多不同的、非互斥的选项时,C/C++ API 通常会设置位“标志”。每个标志都将在一个值(通常是一个DWORD或其他大整数类型)中分配一个位位置。这些位中的一个或多个然后可以通过按位或对一组定义的常量进行设置,这些常量表示选项,并为您提供比原始数字常量更清晰的标签来识别它们。结果值作为单个参数传递给 API 函数,这有助于保持签名的可管理性。

在这种特殊情况下,SDL_HWSURFACESDL_FULLSCREEN表示可以传递给SDL_SetVideoMode调用的选项。在这种情况下,可能还有其他几个未设置的可用选项。这个特定的调用通过将标志常量按位或运算来设置这两个选项,并将结果作为最后一个参数传递。

于 2012-08-21T18:57:27.353 回答
5

那是bitwise OR运营商。它适用于SDL_HWSURFACESDL_FULLSCREEN

于 2012-08-21T18:48:24.860 回答
1

|运算符表示按位或。这意味着如果设置了左侧或右侧值中的相应位,则设置结果中的每个位。所以1 | 2 = 3,因为二进制的 1 是 01,二进制的 2 是 10。所以二进制的结果是 11,即十进制的 3。

在您的示例中,这用于将许多不同的开/关选项传递给函数。每个常量都只有一个位集。然后该函数查看您传递的值并使用按位和运算符&检查您指定的值。

于 2012-08-21T19:07:36.333 回答
1

其他答案解释了它是按位或,但您可能想知道它是如何工作的:

标志作为二进制数传递,如 00001000 或 01000000,每个位代表一个单独的标志。所以第一位 (0) 表示 HW_SURFACE 关闭,第二位 (1) 表示 FULLSCREEN 开启。(请注意,这些是示例,我不确定实际位。)

所以按位或函数所做的是通过比较每个位并说“这个位或这个位为 1 吗?”来组合这两个标志。如果其中一个为 1,则将结果设置为 1。这将提供结果 01001000,SDL 可以对其进行解析以设置适当的标志。

于 2012-08-21T19:32:20.160 回答