查找特定类型

时间:2017-11-15 08:57:31

标签: c

在C中找到特定类型的最大可能位的最简洁方法是什么?

到目前为止,我找到了两种似乎有用的方法:

type value = ~(((type) - 1) >> 1);

type value = 1 << ((sizeof(type) * CHAR_BIT) - 1);

我在这里要做的是得到一个值,表示你可以在任何类型中设置的最大位,即char(8位),即:

10000000b

以上两行是做什么的。有没有更好的方法来处理这个?使用上述任何一行来计算这个都有明显的缺点吗?

1 个答案:

答案 0 :(得分:2)

您的方法几乎适用于无符号类型。 在第二种情况下,您在转移之前忘记将1转换为目标类型。

type value = ((type)1) << ((sizeof(type) * CHAR_BIT) - 1);

对于签名类型,它们不可移植:

  • 第一个因为符号表示可能不是两个补码

  • 第二个因为转移到符号位未定义

对于带符号的类型,最简单的应该是对最大值进行位补码,例如

~INT_MAX

“通常”这与INT_MIN的值相同(对于其他类型也是如此),但在奇怪的架构上,它可能是负0甚至是陷阱。