如何在C ++ 11中初始化uint64_t

时间:2016-04-17 17:51:53

标签: c++ c++11

strcpy将输出显示为uint64_t x(1 << 35)并带有警告。什么最适合初始化这么大的值?

4 个答案:

答案 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 即可。