C语言取二进制最高位1

膜拜mstlq:https://bbs.csdn.net/topics/330068401

//find the Power of 2 that Greater than or Equal to x
uint32_t p2ge(uint32_t x) {
	--x;
	x = x | (x >> 1);
	x = x | (x >> 2);
	x = x | (x >> 4);
	x = x | (x >> 8);
	x = x | (x >> 16);
	return x + 1;
}

改一下就是我们要的

//x = 0时结果未定义
uint32_t highbit(uint32_t x) {
	x = x | (x >> 1);
	x = x | (x >> 2);
	x = x | (x >> 4);
	x = x | (x >> 8);
	x = x | (x >> 16);
	return (x >> 1) + 1;
}

也可以用__builtin_clz

//x = 0时结果未定义
uint32_t highbit(uint32_t x) {
	return 1u << (31 - __builtin_clz(x));
}
posted @   寻找繁星  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示