将int转换为错误的返回类型

时间:2019-03-20 01:05:30

标签: c

我开发了一个将int转换为32位的函数。问题是我正在尝试将返回的位放入int的数组类型中,但没有来。我应该使用char数组吗?由于我需要将位逐点传递给另一个函数,因此我需要将它们存储在数组中。下面是代码:

 int main()
{

int x=24; // int whose 32 bits i need
int n=32; // number of bits needed
int p=0; // starting position.

int py[32]=getBits(x,p,n);
printf("\n",py);
return 0;
}


unsigned getBits(unsigned x, unsigned p, unsigned n) {
  return (x >> (p + 1 - n)) & ~(~0 << n);
 }

1 个答案:

答案 0 :(得分:3)

这里有很多错误,例如在运行时分配给数组。

要将32位int的各个位存储到数组元素中,可以使用以下方法。

//assumes bits has been declared as unsignef char bits[32]
void get_bits32(unsigned char * bits, unsigned int x) {
    for(int i = 0; i < 32; i++)
        bits[i] = (x >> i) & 1u;
}

您可以如下修改此参数以指定位数或数组长度。

void get_bits32(unsigned char * bits, int n, unsigned int x) {
    for(int i = 0; i < n; i++)
        bits[i] = (x >> i) & 1u;
}

这里使用了一个char数组,因为您预期只有0或1s。

此版本将最低有效位存储在数组的位置0。

要打印此图像,必须打印数组的每个元素,例如。

for(int i = 0; i < n; i++)
    printf("%d", bits[i]);