首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提取整型二进制表示的最后四位数

提取整型二进制表示的最后四位数
EN

Stack Overflow用户
提问于 2014-12-03 12:08:40
回答 4查看 1.3K关注 0票数 2

我在提取二进制表示的最后4个数字时遇到了问题,我的数字是:,我得到了第一个4,但是我得到了最后四个^:

代码语言:javascript
运行
复制
 # include <stdio.h>
 # include <stdlib.h>
 # define BYTETOBINARYPATTERN "%d%d%d%d%d%d%d%d\n"
 # define BYTETOBINARY(byte)  \
 (byte & 0x80 ? 1 : 0), \
 (byte & 0x40 ? 1 : 0), \
 (byte & 0x20 ? 1 : 0), \
 (byte & 0x10 ? 1 : 0), \
 (byte & 0x08 ? 1 : 0), \
 (byte & 0x04 ? 1 : 0), \
 (byte & 0x02 ? 1 : 0), \
 (byte & 0x01 ? 1 : 0) 

 int main()
 {
    int num = 505;
    PRINTBIN (num);

    //  int result = num & bitwise;
    //PRINTBIN(result);
    // first num;
    int i;
    int bit=0x01;
    int bitwise;
    for (i =0;i<4;i++)
    {
        int bit1=bit<<i;
        bitwise = bit1|bit;

    }
    printf("1:%d\n", bitwise);
    PRINTBIN(bitwise);

    //second num;
    int bitwise1;
    int b0 = 0;
    int bit2;
    for(i=0;i<4;i++)
    {
         bit2 = bit<<(4+i);
         bitwise1 = bit2|b0;    
         PRINTBIN(bit2);
    }
    printf("2:%d\n",bitwise1);
    PRINTBIN(bitwise1);

    return 0;

}
EN

回答 4

Stack Overflow用户

发布于 2014-12-03 12:12:12

有一种比您所做的简单得多的方法:num & 0x0f将获得最后四个数,然后您只需使用printf("%04b\n", num &0x0f);以二进制形式打印它。编辑:%b说明符不是标准的!那么可能不应该使用它,而是使用下面的示例。/edit

任何十六进制的f都是二进制的1111,这使得提取这些四位数变得很容易。如果你不能只使用printf,你也可以很容易地打印出来,一次屏蔽一个,然后将数字移位以排列另一个来显示。例如:

代码语言:javascript
运行
复制
for(int i = 0; i < 4; i++) {
    printf("%c", (number & 8) ? '1' : '0'); // print the number on the left of the quartet
    number <<= 1; // shift it to the right by one position, putting the next bit in position to print next loop around
}

位操作中的其他有用技巧是将1移位以获得掩码。要获得第#n位,从右开始,执行number & (1 << n)。一次左移0次是1-该掩码得到最低有效位(最右侧)。一次左移是两次,第二个最低有效位,依此类推。您的bit1 = bit << i代码行可以做到这一点,但我更喜欢使用文字1来说明它不必是一个变量。

票数 2
EN

Stack Overflow用户

发布于 2014-12-03 12:41:05

如果您只想显示4位数,只需使用查找表,因为我们已经知道所有可能的表示形式。如果您想在其他位置显示另外4位数字,只需在num&0x0F之后进行移位,但掩码将是其他值而不是0x0F

代码语言:javascript
运行
复制
const char * bin[16] = {
    "0000",
    "0001",
    "0010",
    ......
    "1111"
};

printf("%s\n", bin[num&0x0F]);
票数 2
EN

Stack Overflow用户

发布于 2014-12-03 13:52:02

num & 0xF将提取最后一个for数字。

要打印最后4个,代码可以使用:

代码语言:javascript
运行
复制
printf("%04d", (num&8)*125 + (num&4)*25 + (num&2)*5 + (num&1));

另一种使用八进制的方法:

要打印最低有效的8,代码可以使用:

代码语言:javascript
运行
复制
printf("%08lo", 
   (num&128)*16384LU + (num&64)*4096L + (num&32)*1024L + (num&16)*256 +
   (num&8)*64 + (num&4)*16 + (num&2)*4 + (num&1));

该方法使用多项方程或for循环,最多可处理21位和unsigned long long

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27263467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档