在阅读ASM 4.1源代码后,我发现了以下实例:
int ASM4 = 4 << 16 | 0 << 8 | 0;
int ASM5 = 5 << 16 | 0 << 8 | 0;
Run Code Online (Sandbox Code Playgroud)
这些左移0到8是否对表达做了什么,或者'或'为0做了什么?
它不等于只有:
int ASM4 = 4 << 16;
int ASM5 = 5 << 16;
Run Code Online (Sandbox Code Playgroud)
man*_*uti 38
实际上它们是等价的,但一种可能的解释是,他们希望将包括主要和次要数字的版本号映射到其代码中的唯一ID.所以在下面:
int ASM4 = 4 << 16 | 0 << 8 | 0; // this looks like 4.0.0
int ASM5 = 5 << 16 | 0 << 8 | 0; // this looks list 5.0.0
Run Code Online (Sandbox Code Playgroud)
在4和5代表的版本4,并5分别与zero中0 << 8可能是次要的数字,最后zero是另一个次要号码,如4.0.0和5.0.0.但无论如何,那是我的猜测.你真的要问作者.
Adr*_*ard 17
在上下文中:
// ASM API versions
int ASM4 = 4 << 16 | 0 << 8 | 0;
int ASM5 = 5 << 16 | 0 << 8 | 0;
Run Code Online (Sandbox Code Playgroud)
是的,这相当于
int ASM4 = 4 << 16;
int ASM5 = 5 << 16;
Run Code Online (Sandbox Code Playgroud)
这只是为了清楚地说明我们将第3个字节设置为4,并将两个较低的字节设置为0.或者,这是一个应该读取为4.0.0的版本号.
fge*_*fge 10
它确实没有任何意义,但它的整齐和视觉对齐,以便ASM开发人员了解操作码版本(如果我没有弄错,这就是OpCodes你在这里看到的界面).
与你使用1 << 0vs 1 << 1等相同的方式