-1u是有效的c ++吗?

Joc*_*hen 11 c++ platform-independent

例如

size_t x = -1u;

if (x == -1u)
    ...
Run Code Online (Sandbox Code Playgroud)

有效?

如果这是有效的,它将阻止警告.当然在32位系统上x应该是0xffffffff而在64位系统上它应该是0xffffffffffffffff.

-Jochen

Jam*_*lis 7

1u有类型unsigned int.然后使用一元运算-符对此进行否定.行为如下:

无符号数量的负数是通过从2 n减去其值来计算的,其中n是提升操作数中的位数(C++ 11 5.3.1/8).

-1u因此保证为您提供可表示的最大值unsigned int.

要获得可由任意无符号类型表示的最大值,可以-1转换为该类型.例如std::size_t,考虑 static_cast<std::size_t>(-1).


Sti*_*sis 5

我总是使用~0U来达到"无符号,所有位都开启"的目的.

  • ...这对于64位`size_t`不起作用. (4认同)