如何在C中将int转换为5位2s补码?

时间:2015-05-31 10:54:52

标签: c bit-manipulation

我有-9作为整数,如何将其转换为C中的5位2s补码整数?基本上得到10111?

我目前的代码是什么样的:

char src2[3] = "-9";
int int_src2 = atoi(src2);
int_src2 = int_src2 & 31;

我的直接想法是int_src2是8388112,当AND操作后设置为16时 - 而我想要10111

1 个答案:

答案 0 :(得分:0)

您可以使用位域和联合的组合:

#include <stdio.h>

typedef struct
{
    unsigned int bit1:1;
    unsigned int bit2:1;
    unsigned int bit3:1;
    unsigned int bit4:1;
    unsigned int bit5:1;
} five;

typedef union {five f; int i;} u;

int main() {
    u test;
    test.i = -9;
    printf("%u%u%u%u%u\n",test.f.bit5,test.f.bit4,test.f.bit3,test.f.bit2,test.f.bit1);
    return 0;
}

直播示例:https://ideone.com/ow0Bl6