C++;位掩蔽和移位 我有一个传统的C++二进制操作代码,比如: constexpr static uint64_t val2bin(double val) { uint64_t bin = (val > 0.) ? uint64_t(val/0.01)+1 : 0; return (bin > 510) ? 511 : bin; }

C++;位掩蔽和移位 我有一个传统的C++二进制操作代码,比如: constexpr static uint64_t val2bin(double val) { uint64_t bin = (val > 0.) ? uint64_t(val/0.01)+1 : 0; return (bin > 510) ? 511 : bin; },c++,bit-manipulation,C++,Bit Manipulation,然后将结果用作表达式的一部分: static uint64_t const MASK = 0x1FF; static uint64_t const VAL_OFFSET = 10; ((val2bin(val) & MASK) << VAL_OFFSET) static uint64\u t const MASK=0x1FF; 静态uint64常数值偏移=10; ((val2bin(val)和MASK) 这不是给val设置了一个上限吗?我们可以用这种方式编码 它会给你的输出

然后将结果用作表达式的一部分:

static uint64_t const MASK = 0x1FF;
static uint64_t const VAL_OFFSET = 10;
((val2bin(val) & MASK) << VAL_OFFSET)
static uint64\u t const MASK=0x1FF;
静态uint64常数值偏移=10;
((val2bin(val)和MASK)

这不是给val设置了一个上限吗?我们可以用这种方式编码

它会给你的输出设置一个上限。 此处执行的操作:

static uint64_t const MASK = 0x1FF;
static uint64_t const VAL_OFFSET = 10;
((val2bin(val) & MASK) << VAL_OFFSET)
static uint64\u t const MASK=0x1FF;
静态uint64常数值偏移=10;

((val2bin(val)和MASK)“它不是给我们可以用这种方式编码的val设置了一个上限吗?”是的。“我无法理解我们试图通过这种方式在功能上实现什么?”这就是你和你能从这部分代码中收集到的任何古老的功能需求之间的关系。lol…遗留代码。我无法想象有人能正确回答这个问题。我的观察:掩码是无用的,因为val2bin限制为0x1FF。结果向左移动了10。我认为不可能说mor我想这是由使用上下文决定的。玩得开心;)你为什么要用
uint64_t(val/0.01)
uint64_t(val*100)
不仅更快,而且更正确,因为0.01不能用双精度表示