Mic*_*ney 1 c++ binary hex chess bitboard
下面的函数尝试创建一个位板,其中设置的位位于第 N 个位置,通过位移 0x1 N 次来达到所需的结果。N 由 uint16_t 中的第 1-6 个最低有效位给出。然后将其屏蔽以隔离 6 个 lsb。
uint64_t endSquareFinder(uint16_t a){
a &= (0x003f);
return 0x0000000000000001 << a;
}
Run Code Online (Sandbox Code Playgroud)
所有输入均有效,除了 a = 0x001f 时,函数的输出为 0xffffffff80000000 而不是 0x0000000080000000。这对我来说非常奇怪。
gdb编译器
您需要将其转换1
为无符号 64 位整数。现在这是一个int
...
#include <type_traits>
// this passes:
static_assert(std::is_same_v<decltype(0x0000000000000001), int>);
Run Code Online (Sandbox Code Playgroud)
...很可能只有 32 位。
例子:
return std::uint_least64_t(1) << a;
// or
return 1ull << a; // "unsigned long long int" is at least 64 bits
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80 次 |
最近记录: |