如何从单词x中提取十六进制数n?

时间:2017-10-02 23:20:20

标签: c

getHexDigit - 从单词x

中提取十六进制数字n
  • 从0(最不重要)到7(最重要)的数字
  • 示例:getHexDigit(0x12345678,2)= 0x6
  • 法律视角:! 〜& ^ | +<< >>

我很困惑,因为我不明白如何使用这些操作提取和写入。请帮忙!!

    int getHexDigit(int x, int n) {

         return  (x >> (n >> 4)) & 0xff; // How do I fix this

        }

2 个答案:

答案 0 :(得分:1)

这应该这样做:

int getHexDigit(int x, int n) {
    return (x >> (n << 2)) & 0xf;
}

首先,将n乘以4(向左移2位),因为每个十六进制数字是4位,然后通过右移和屏蔽{{1 }}

例如,了解它如何适用于0x0f

getHexDigit(0x1234, 2)

答案 1 :(得分:1)

单个数字对应4位,因此您必须将WHERE位向右移位;因此,您必须将n*4乘以n,因为您不能使用4,所以您只需编写n * 4;向左移位两位意味着n << 2

2*2

然后你必须&#34;揭开&#34;除了你想要的数字之外的所有数字;因此return (x >> (n << 2)) & 0x0F;