相关疑难解决方法(0)

数字文字的ULL后缀

我遇到过这样的代码:

line += addr & 0x3fULL;
Run Code Online (Sandbox Code Playgroud)

显然,'U'和'L'不是十六进制数字.我猜测该十六进制数字文字末尾的'ULL'意味着"无符号长龙" - 我是否正确?(这种事情很难谷歌)如果是这样那么这是数字上的某种后缀修饰符?

c c++

67
推荐指数
3
解决办法
6万
查看次数

长期和长期之间有什么区别

长长和长长有什么区别?他们都不能使用12位数字(600851475143),我忘记了什么吗?

#include <iostream>
using namespace std;

int main(){
  long long a = 600851475143;
}
Run Code Online (Sandbox Code Playgroud)

c++ int long-integer

24
推荐指数
3
解决办法
3万
查看次数

阈值是绝对值

我有以下功能:

char f1( int a, unsigned b ) { return abs(a) <= b; }
Run Code Online (Sandbox Code Playgroud)

对于执行速度,我想重写如下:

char f2( int a, unsigned b ) { return (unsigned)(a+b) <= 2*b; } // redundant cast
Run Code Online (Sandbox Code Playgroud)

或者使用此签名,即使对于非负面也可能具有微妙含义b:

char f3( int a, int b )      { return (unsigned)(a+b) <= 2*b; }
Run Code Online (Sandbox Code Playgroud)

这两种替代方案都可以在一个平台上进行简单的测试,但我需要便携式.假设非负b且没有溢出风险,这是典型硬件和C编译器的有效优化吗?它对C++也有效吗?


注意:作为C++在gcc 4.8 x86_64上使用-O3,f1()使用6个机器指令并f2()使用4.指令f3()与那些相同f2().同样感兴趣的是:如果b以文字形式给出,则两个函数都编译为3条指令,这些指令直接映射到指定的操作f2().

c c++ micro-optimization undefined-behavior language-lawyer

6
推荐指数
1
解决办法
341
查看次数