c++ - 在无符号整数中使用标志号

标签 c++ c

很多时候人们会通过重新使用他们已经拥有的 int 变量并检查 -1 是否存在某些东西来组合 bool 检查。

但是,如果有人想使用无符号整数但仍想使用此方法,而且 0 除了存在之外还有其他含义,该怎么办。

有没有办法让数据范围为-1到4,294,967,294?

这里明显的选择是只使用一个 bool 来检测你在找什么,但我的理解是 bool 是一个字节,并且可以真正添加到存储大小,如果你有一个结构数组。这就是为什么我想知道是否有一种方法可以获取最有用的数字(postivies),同时只留下一个数字作为标志。

事实上,如果可以做一些像移动数据类型的数据范围这样的事情,似乎将它移动到 -10 到 4,294,967,285 这样的东西会让你有 10 个 bool 标志而不需要额外的成本(位) .

这里明显的 hacky 方法只是将任何数字添加到您的存储中,并记住稍后对其进行说明,但我想让它更具可读性(我想如果是这样的话我什至不应该使用 - 1,但是嗯)。

最佳答案

如果您只是想选择一个在您对变量的解释中不存在的值并用它来指示异常或错误值,为什么不直接这样做呢?您可以采用这样的值,将其定义为宏并使用它。例如,如果您确定您的变量永远不会达到最大限制,请输入:

#define MY_FUN_ERROR_VALUE (UINT_MAX)

然后您可以将其用作:

unsigned r = my_function_maybe_returning_error();
if (r == MY_FUN_ERROR_VALUE) {handle error}

您还应确保 my_function_maybe_returning_error 在正常情况下实际上没有错误发生时不会返回 MY_FUN_ERROR_VALUE。为此,您可以使用 assert:

unsigned my_function_maybe_returning_error() {
    ...
    // branch going to return normal (not error) value r
    assert(r != MY_FUN_ERROR_VALUE);
    return(r);
}

我看不出有什么不妥。

关于c++ - 在无符号整数中使用标志号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22852961/

相关文章:

c++ - 向量化短浮点转换?

c++ - 在 mac 中创建 dylib 在 python 中导入

c - 如何显示字符串表中的元素

c - SSE 未对齐负载内在是否比 x64_64 Intel CPU 上的对齐负载内在慢?

c - 重新分配三重指针

c++ - 混合 cin 和 getline 输入问题

c++ - 有没有一种可移植的方法可以将标准输入重定向到 C++ 中的字符串?

c - 使用数据结构和算法(特别是 C 编程语言)的内存数据库

c - 程序在 printf 中间结束,但不在 GDB 中

c++ - C++:在SIGUSR信号上序列化对象