【发布时间】:2019-11-03 23:06:16
【问题描述】:
给定一个保证为某种整数的clock_t 数据类型,如何使用可移植C 代码测试最高有效位的值?也就是说,我需要这个函数的定义:
bool is_msb_set(clock_t clock);
但这里有个转折点:你不知道clock_t 的大小,也不知道它是有符号的还是无符号的(但假定“有符号”是双恭维)。
我的第一个想法是这样做:
const clock_t MSB = 1 << ((sizeof(clock_t) * 8) - 1);
bool is_msb_set(clock_t value) {
return value & MSB;
}
但如果clock_t 是有符号值,则MSB 的定义会溢出。也许我想多了,但我很难过。
【问题讨论】:
-
只需将 MSB 设为
uintmax_t而不是clock_t(并在明显移动之前转换为1) -
你从哪里得到它保证是一个整数。? >
-
clock_t可以是浮动类型。为此,将很难找到最重要的位,因为&位操作将不起作用。 -
您应该使用
CHAR_BIT而不是8来表示char的大小(来自limits.h) -
@GreenTree:如果我遇到
clock_t是浮点数的端口,我会给它自己的实现。在我支持的所有系统中(到目前为止),clock_t类似于整数。
标签: c integer-overflow twos-complement