strcpy
将输出显示为uint64_t x(1 << 35)
并带有警告。什么最适合初始化这么大的值?
答案 0 :(得分:9)
这是因为1 << 35
是使用int
的操作。如果你想要64位类型,那么使用1ULL << 35
来确保它是使用unsigned long long
的操作(保证至少为64位)。
答案 1 :(得分:4)
auto x = std::uint64_t(1) << 35;
答案 2 :(得分:2)
你遇到的问题是编译时评估常量表达式1&lt;&lt;用int类型执行35。所以你可能会溢出那种类型并且行为未定义!
最简单的解决方法是使用1ULL&lt;&lt; 35.无符号长字符必须至少为64位。
答案 3 :(得分:1)
uint64_t x2 = (1ull << 35ull);
ull 将值标记为 unsigned long long
public static byte[] bitwiseOr(byte[] bytes1, byte[] bytes2) {
if (bytes1.length < bytes2.length)
return bitwiseOr(bytes2, bytes1);
// bytes1 is never shorter than bytes2
byte[] ret = bytes1.clone();
for (int i = 0; i < bytes2.length; i++)
ret[i] |= bytes2[i];
return ret;
}
与正常的 long long 相同。
||
只需在数字末尾添加 ull 即可。