获取按位不为零的无符号整数的最大值

San*_*lin 2 c c++ bit-manipulation numeric-limits

我正在尝试获取某个无符号整数类型的最大值,而不包含任何像<limits>. 所以我想我只是翻转无符号整数值 0 的位。

#include <iostream>
#include <limits>

int main()
{
    std::cout << (~0U) << '\n'; // #1
    std::cout << (std::numeric_limits< unsigned >::max()) << '\n'; // #2
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我对这些之间的细微差别不是很有经验。这就是为什么我要问使用第一种方法是否会发生某些意外行为或某些平台/架构问题。

chu*_*ica 5

... 获取某个无符号整数类型的最大值,不包括任何标头

简单地赋值 -1

unsigned_type_of_choice max = -1;
Run Code Online (Sandbox Code Playgroud)

将 ,即-1,转换int为任何无符号类型会导致number的值比最大值减 11。

以下不提供目标类型的最大值。当目标类型范围超过 的范围时失败unsigned,这是 的类型~0U@克里斯托弗·奥克斯

// problem
unsigned_type_of_choice max_wannabe = ~0U;
Run Code Online (Sandbox Code Playgroud)