gpt4 book ai didi

c - 如何测试有符号或无符号整数的最高有效位?

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:39 25 4
gpt4 key购买 nike

给定一个 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 的定义就会溢出。也许我想多了,但我很难过。

最佳答案

我想我们可以先检查clock_t是有符号的还是无符号的,然后据此进行处理。

bool is_msb_set(clock_t value) {
if ((clock_t)-1 < 0) {
/* clock_t is signed */
return value < 0;
} else {
/* clock_t is unsigned */
return ((value << 1) >> 1) ^ value;
}
}

关于c - 如何测试有符号或无符号整数的最高有效位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58685415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com