相关疑难解决方法(0)

使用-1将所有位设置为true是否安全?

我已经看到这种模式在C&C++中使用了很多.

unsigned int flags = -1;  // all bits are true
Run Code Online (Sandbox Code Playgroud)

这是一个很好的便携式方法吗?或正在使用0xffffffff~0更好?

c c++ binary bit-fields

130
推荐指数
9
解决办法
3万
查看次数

使用无符号整数的最大值时," - 1"是否正确?

是否有任何c ++标准段落表示使用-1此方法是可移植和正确的方法或正确执行此操作的唯一方法是使用预定义值?

我有一个谈话与我的同事,什么是更好的:使用-1最多的无符号整数,或者使用从价值limits.h还是std::numeric_limits

我已经告诉我的同事,使用预定义的最大值,limits.h或者std::numeric_limits是这样做的便携和干净的方式,然而,同事反对-1像数字限制一样可移植,而且更多,它还有一个优点:

unsigned short i = -1; // unsigned short max
Run Code Online (Sandbox Code Playgroud)

可以轻松更改为任何其他类型,如

unsigned long i = -1; // unsigned long max
Run Code Online (Sandbox Code Playgroud)

当使用limits.h头文件中的预定义值时,或者std::numeric_limits还需要将其与左侧的类型一起重写.

c++

37
推荐指数
5
解决办法
3930
查看次数

C标准支持的平台列表

有没有人知道C标准支持的任何平台,对于这些平台仍然有积极的开发工作,但它们是:

  • 不是2的补充或
  • 整数宽度不是32位或64位或
  • 某些整数类型有填充位或
  • 如果您使用2的补码机器,符号位1和所有值位0的位模式不是有效的负数或
  • 从有符号到无符号的整数转换(反之亦然)不是通过逐字复制位模式或
  • 整数的右移不是算术移位或
  • 无符号类型中的值位数不是相应有符号类型+ 1或中的值位数
  • 从较宽的int类型转换为较小的类型不是通过截断不适合的最左边的位

编辑:或者,如果1995年至1998年期间有平台影响了C99决定包括上述内容,但已停止使用,我也会对它们感兴趣.

编辑:C理由有关填充位的说法:

填充位是用户可访问的无符号整数类型.例如,假设一台机器使用一对16位短路(每个都有自己的符号位)来构成一个32位的int,并且当在这个32位int中使用时,忽略较低short的符号位.然后,作为32位有符号整数,在确定32位有符号int的值时会忽略一个填充位(在32位的中间).但是,如果将此32位项目视为32位无符号整数,则该填充位对用户程序可见.C委员会被告知有一台机器以这种方式工作,这就是填充位被添加到C99的一个原因.

脚注44和45提到奇偶校验位可能是填充位.委员会不知道任何具有用户可访问的奇偶校验位的机器在整数内.因此,委员会不知道任何将奇偶校验位视为填充位的机器.

所以另一个问题是,C99提到的那台机器是什么?

编辑:看来,C99正在考虑消除对1的补支持和符号的振幅:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n868.htm HTTP://www.open- std.org/jtc1/sc22/wg14/www/docs/n873.htm(搜索6.2.6.2)

c standards

24
推荐指数
5
解决办法
751
查看次数

是否保证将 -1 分配给无符号类型会产生最大值?

我发现了一些关于这个特定主题的问题,但它们都是关于 C++ 的。

将 -1 转换为无符号类型的便携性如何?

将 -1 转换为无符号类型

将 -1 分配给 unsigned int 以获得最大值是否安全?

在阅读答案时,这似乎是 C 和 C++ 不同之处之一,这似乎是可能的,或者至少不是不可能的。

问题很简单:

如果我声明一个变量unsigned char/short/int/long var或使用任何其他无符号类型,如固定宽度、最小宽度等,那么是否保证var = -1将设置var为它可以容纳的最大值?该程序是否保证打印“是”?

#include <stdio.h>
#include <limits.h>

int main(void) {
    unsigned long var = -1;
    printf("%s\n", var == ULONG_MAX ? "Yes" : "No");
}
Run Code Online (Sandbox Code Playgroud)

c unsigned

2
推荐指数
1
解决办法
53
查看次数

标签 统计

c ×3

c++ ×2

binary ×1

bit-fields ×1

standards ×1

unsigned ×1