将高位切换为1并将位休息为0 [例如:10110至10000]

时间:2017-08-30 14:29:49

标签: c toggle bit-shift

我需要根据用户提供的数字找出掩码值。

例如。如果用户提供输入

  

22(二进制10110)

然后我需要通过将输入的高位更改为1并休息到0来找到掩码值。 所以在这种情况下它应该是:

  

16(二进制10000)

是否有c语言的内置方法可以这样做。

2 个答案:

答案 0 :(得分:1)

你可以计算出最高位的位置

一旦你拥有它,只需向左移动以获得正确的掩码值:

def organize_data(df):

    rng = int(input('How many peptides do you have to analyze:  '))

    df1 = df.columns.to_series().str.extract('([a-zA-Z]+)(\d+)', expand=True)
    df1[1] = df1[1].astype(int)
    df.columns = df1.T.values.tolist()
    df = df.sort_index(level=1, axis=1)

    df2 = df.loc[:, df.columns.get_level_values(1) <= rng]
    df2.columns = [''.join((x[0], str(x[1]))) for x in df2.columns]
    return df2

a = organize_data(df)
print (a)

这将 unsigned int x = 22; int result = 0; if (x != 0) { unsigned int y = x; int bit_pos=-1; while (y != 0) { y >>= 1; bit_pos++; } result = 1<<bit_pos; } 设置为result

(如果输入的值为16),则会出现特殊情况

答案 1 :(得分:0)

基本上,您需要将最小功率对齐到两个数字。我不确定是否有标准功能,但请尝试以下方法:

static inline uint32_t
floor_align32pow2(uint32_t x)
{
        x |= x >> 1;
        x |= x >> 2;
        x |= x >> 4;
        x |= x >> 8;
        x |= x >> 16;

        return (x >> 1) + (x & 1);
}