c语言 - 二进制错误的无效操作数(具有"long unsigned int *"和"int")



我试图在给定的位置设置一个位,但我一直遇到错误,有人能帮我吗?

这是我的代码:

int set_bit(unsigned long int *n, unsigned int index)
{
    long unsigned int value;
    value = n | (1 << index);
}
int main(void)
{
    int n;
    n = 1024;
    set_bit(&n, 5);
    printf("%lun", n);
    n = 0;
    set_bit(&n, 10);
    printf("%lun", n);
    n = 98;
    set_bit(&n, 0);
    printf("%lun", n);
    return (0);
}
  • 您应该取消引用指针n以获得unsigned long int的值
  • 您应该在文字1之前使用lu前缀来使用unsigned long而不是int,以防止移位操作中出现溢出
  • 未使用set_bit的返回值,也没有使用return语句,因此返回类型应为void
  • 应包括stdio.h以使用printf()

试试这个:

#include <stdio.h>
void set_bit(unsigned long int *n, unsigned int index)
{
    *n = *n | (1lu << index);
}
int main(void)
{
    int n;
    n = 1024;
    set_bit(&n, 5);
    printf("%lun", n);
    n = 0;
    set_bit(&n, 10);
    printf("%lun", n);
    n = 98;
    set_bit(&n, 0);
    printf("%lun", n);
    return (0);
}

您的set_bit函数需要lu指针(unsigned long int*n(,而您在函数中将其视为lu值(n|(1<<index((。

写得有点不同-值=*n|(1<<index(

最新更新