簡體   English   中英

如何按位截斷無符號長整數中的第一位?

[英]How do I cut off first bits in an unsigned long with bitwise?

我有m = 0x401e000000000000並且我想得到f = 0xe000000000000 使用按位運算符,我將如何在 C 中執行此操作? 我用f = (m & 0xFFFFFFFFFFFFF);

但我只得到0。

IDEOne中運行時,它可以工作

#include <stdio.h>

int main(void) {
  unsigned long m = 0x401e000000000000;
  unsigned long f = m & (0xFFFFFFFFFFFFF); // Expect value = 0xe000000000000.
  
  printf("Result f = 0x%0lX\n", f);
  
    return 0;
}

Output

Success #stdin #stdout 0s 5416KB
Result f = 0xE000000000000

您也可以使用>> <<運算符,代碼中的“12”是您要移動的位位置。 <<運算符將其左側操作數向左移動其右側操作數定義的位數。 左移操作舍棄結果類型范圍之外的高位,並將低位空位位置置零,然后可以使用>>操作數恢復比例。

#include <stdio.h>

int main()
{
    unsigned long m = 0x401e000000000000;
    m = (m<<12);
    m = (m>>12);

    printf("Result f = 0x%0lX\n", m);

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM