前几天,我遇到了这个结构:
static_cast<size_type>(-1)
Run Code Online (Sandbox Code Playgroud)
在一些示例C++代码中,可能(取决于where的详细信息size_type)等同于以下C:
(size_t)(-1)
Run Code Online (Sandbox Code Playgroud)
据我所知,它的工作原理是二进制补码算术中-1的表示形式,11111...1就像你所拥有的那样多,所以这是获得无符号类型size_t可以容纳的最大值的快速方法.但是,我的理解是C不保证将使用二进制补码; 如果C实现使用一个补码,这将比最大值小1,如果它使用有符号幅度,它将只是最大值的一半.
是否有一些我不知道的皱纹确保无论使用的有符号整数的表示如何都能正常工作?C和C++之间有什么不同(许多令人惊讶的事情都有)?
请考虑以下代码来设置x的所有位
unsigned int x = -1;
Run Code Online (Sandbox Code Playgroud)
这是便携式吗?它似乎至少适用于Visual Studio 2005-2010
如果我需要获取最大值,将-1分配给unsigned int或其他无符号c ++数据类型是否安全?
是否存在无法给出无符号数据类型可以包含的最高值的情况?