数字 0ui64 是多少
What is the number 0ui64?
我看到
#define NUM_MAX_VOLUME 0ui64
在其他人的代码中
数字 0ui64 是多少? 不过,它似乎不是一个十六进制数字。
惊讶有很多答案,但没有一个指出我认为应该注意的官方和权威文档,所以这里是MSDN文档:
无符号后缀:以下之一
u U
和
64 位整数后缀:
i64 LLll
因此,它确实不是一个六边形数字,而基本上是一个定义为零的宏,表示一个未确定的 64 位整数。请注意,0Ui64
、0ULL
、0ull
等也都是一样的。
当您想要确保符号和大小是固定的,以便它不会发生意外或未定义的行为时,这是必需的。
这既不是标准的C++,也不是 C,而是Microsoft编译器功能。尽量避免它。
由于您的问题被标记为Qt,因此建议使用quint64和Q_UINT64_C,这将跨平台工作。所以,你会写这样的东西:
#define NUM_MAX_VOLUME Q_UINT64_C(0)
ui64"表示无符号的64位整数。在某些情况下,它是一个非标准后缀。"0ui64"只是0,我想这样写的原因是为了兼容性。
它基本上用于操作数的大小(此处的常量(很重要的表达式中。以换档为例:
auto i = 1 << 36;
在int
长度为 32 位的计算机上,这将导致未定义的行为。由于此处的1
被视为int
,并且您正在尝试将其移动到结果类型的大小之外:int
。你想要的是一个 64 位整数类型,比如说unsigned long long
然后你会做的
auto i = 1ULL << 36;
这不是 UB,因为由于操作数(现在也是一个unsigned long long
(,生成的类型也将是一个unsigned long long
。
另一个例子是C++11的auto
关键字的类型推断。试试这个:
for (auto i = 0; i < v.size(); ++i)
启用警告 GCC 吠叫(实时示例(
警告:有符号和无符号整数表达式之间的比较 [-Wsign-compare]
但是,将其更改为
for (auto i = 0u; i < v.size(); ++i)
使警告消失。同样,由于后缀0u
导致编译器推断出i
的类型unsigned int
,而不仅仅是int
。
在您的情况下,您的后缀ui64
不是标准C++,因此它应该是特定于实现的扩展,表示无符号的 64 位整数。
0xFull
也是有效的C++常量。它是0xF的,无符号的长长,又名ui64在Microsoft编译器转录中。
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 在内存不足之前,我可以声明多少个 const 变量?
- 可以读入进程内存的最大块大小是多少?
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- 如果我不知道每个列表中有多少个数字,我如何将给定数量的数字列表作为输入?
- 数字 0ui64 是多少