-1u在c++中有效吗?
Is -1u valid c++?
例如
size_t x = -1u;
if (x == -1u)
...
有效吗?
如果这是有效的,它将阻止警告。当然,在32位系统上x应该是0xffffffff,而在64位系统上系统应该是0xffffffffffffffff。
jochen
1u
的类型为unsigned int
。然后使用一元-
运算符将其取反。行为如下:
因此,无符号数的负数是通过2n减去它的值来计算的,其中n是提升操作数(c++ 11 5.3.1/8)的位数。
-1u
保证为您提供unsigned int
所能表示的最大值。
要获得任意unsigned类型所能表示的最大值,可以将-1
强制转换为该类型。例如,对于std::size_t
,考虑static_cast<std::size_t>(-1)
.
我一直使用~0U来表示"unsigned, all bits on"。
依赖于编译器实现的行为很烦人。不过,您应该能够这样做:
size_t x = 0;
x--;
if ((x+1) == 0)
虽然这在技术上是有效的代码,但您依赖于实现相关的行为:将负数转换为无符号数的溢出处理。然而,如果你需要将size_t与-1进行有意义的比较,因为你正在使用的API调用需要它,那么系统已经搞砸了,但是你的代码可能会工作,因为它们将不得不在API的另一端做同样的事情。
这可能是您想要的:
size_t x = -1ull;
if (x == -((size_t)-1ull))
...
x
将被设置为可能的最大整数,它可能不是全部位。
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么这种直接初始化有效?(C++17)
- 递归函数有效,但无法记忆
- 在C++中初始化向量映射的最有效方法
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 如何有效地在 std::vector 中插入一对?
- C++模板 t 不是有效的模板类型
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 将此布尔值传递给此函数的最有效方法是什么?