我试图在给定的位置设置一个位,但我一直遇到错误,有人能帮我吗?
这是我的代码:
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(