C中的位操作 - 左移以删除最重要的位

时间:2016-12-03 17:10:44

标签: c bit-shift

我有二进制数(32/64位长),我想向左移动,以便前导有效位消失。所有二进制数都有不同的长度。所以我找不到一个简单的方法。

以下是一些例子。左侧是左移之前和右侧的二进制数:左移后的二进制数:

00000000000000000000000000101011011 -> 01011011000000000000000000000000000
00000000000000000000100010110111011 -> 00010110111011000000000000000000000
00000000000000000000000000000100110 -> 00110000000000000000000000000000000
00000000000000111000101010101100010 -> 11000101010101100010000000000000000

如何在C中做到这一点?

1 个答案:

答案 0 :(得分:-3)

uint64_t number;

for(int i = 0; (i < 64) && (number & 0x8000000000000000) == 0); i++)
{
    number <<= 1;
}

number <<= 1;

这是64位数值的一种方法;

固定。