int 到位错误返回类型的转换

标签 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);
 }

最佳答案

这里有很多错误,比如运行时给数组赋值。

要将 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;
}

这里使用了一个字符数组,因为您预计只有 0 或 1。

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

要打印此内容,您必须打印数组的每个元素,例如。

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

关于int 到位错误返回类型的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55252150/

相关文章:

c - 递归关系: find bit strings of length seven contain two consecutive 0 in C

比较两个 uint8_t 类型变量的内容 A[8] = uint8_t B

C:什么是函数指针转换?

c++ - 在 C/C++ 中计算 32 位 CRC 查找表

c - 当目标缓冲区小于源缓冲区时的 strcpy

c - ARM-C-arm-none-eabi-ld : not finding vsprintf, strcpy

c - scanf 读取整数值的意外乘法结果

c++ - 需要帮助使用 GTK2 为 wxWidgets (wxGTK) 编写 "backgroundless"小部件

c++ - 在 C/C++ 中按位指定浮点常量值

c - 尝试从一个内存位置复制到另一个内存位置时出现段错误