如何左对齐32位整数?

sur*_*pta 3 c integer bit-manipulation

我有一个十六进制格式的32位整数变量说0x9B134880x1407E8.默认情况下,它与0x099B1348或是对齐0x001407E8.但我希望它与左对齐0x9B1348800x1407E800.任何人都可以帮助我吗?

dbu*_*ush 8

你真正要求的是是否设置了高阶4位.你可以这样做:

uint32_t left_align(uint32_t value)
{
    if (value) {
        while ((value & 0xF0000000U) == 0) {
            value <<= 4;
        }
    }
    return value;
}
Run Code Online (Sandbox Code Playgroud)

只要该值为非零且高阶4位为0,则向左移动4直到它们为非零.

  • 我的意思是,`if(value)while(!(value&0xF0000000U))value << = 4; 返回值;`可能更好.我说*可能*,因为我认为它更清楚地表达了程序员的意图,更少有机会陷入错误; 学习编程的人的更好的例子.实际上,现在我考虑一下,我喜欢`if(value)while(value <0x10000000)value << = 4; 返回值;`出于同样的原因,甚至更多. (2认同)
  • @P__J__ Re:C规范C11§6.4.4.1不支持"0x ....总是U".应用于常量的类型的符号取决于其值.`0x123`是一个`int`,而不是`unsigned`. (2认同)