我有一种感觉,这是一个相当微不足道的问题,但我很难过.在我的应用程序中,我正在使用一对整数在查找表中键入内容.我认为将两个int连接成一个long更容易,而使用single long作为键.来自C背景,我希望这样的东西能起作用:
int a, b;
long l = (long)a << 32 | b;
Run Code Online (Sandbox Code Playgroud)
我试图用Java复制这个尝试让我感到沮丧.特别是,因为没有无符号整数类型,我似乎无法避免b的自动符号扩展(a左移以使其无关紧要).我尝试过使用,b & 0x00000000FFFFFFFF但令人惊讶的是没有效果.我也尝试过相当丑陋(long)b << 32 >> 32,但它似乎被编译器优化了.
我希望严格使用基元的位操作,但我开始怀疑是否需要使用某种缓冲对象来实现这一点.
我的理解是,pimpl习惯用法的主要好处是隐藏实现文件中的数据成员而不是标题.但是,模板需要在头文件中完全定义,以便编译器按需实例化它们.在这种情况下,使用pimpl习惯用于模板化课程是否有任何优势?
在我正在研究的ANSI C项目中,我定义了两个宏:PERIOD_IN_MS和CYCLES_PER_MS.在实际的周期处理逻辑中,我在每个''周期''递增的计数器之间做了很多比较PERIOD_IN_MS * CYCLES_PER_MS.我担心在每次比较期间都会重复评估这个算术运算.
有谁知道这是否属实,或者编译器是否会在编译时评估两个整数文字的乘积并使用它?
我意识到这个特定的例子可能只会从生成的汇编代码中删除一条指令,但现在我对此很好奇.