【问题标题】:Function which takes a integer n number and sets nth bit接受整数 n 并设置第 n 位的函数
【发布时间】:2011-12-02 16:54:06
【问题描述】:

我想写一个函数,如下所示。我想在整数中设置第 n 位。例如我想在数字 8 中设置第 6 位。

#include<stdio.h>
int set_bit(int number , int postion);

int main()
{
   int a;
   a=(8,6);
}

int set_bit(int number , int position)
{
   number = number |(1<<position);
}

上述功能不起作用。有人可以纠正我吗?

【问题讨论】:

  • 你甚至没有调用 set_bit。您只需执行a=(8,6); 尝试a=set_bit(8,6); 并在set_bit 中您必须返回number

标签: c bit-manipulation


【解决方案1】:

两个问题:

  1. 你没有调用函数:a=(8,6) 应该是a = set_bit(8, 6)

  2. 您没有从函数中返回值:number = number |(1&lt;&lt;position) 应为 return number | (1 &lt;&lt; position)

【讨论】:

    【解决方案2】:

    您可能希望返回number,因为参数在C 中按值传递。所以简单地在函数内部修改number对调用者没有任何影响。

    正如 ruakh 在 cmets 中提到的,您调用函数的语法不正确。

    试试:

    int set_bit(int number , int position)
    {
        return number | (1 << position);
    }
    
    /* ... */
    
    a = set_bit(8, 6);
    

    附带说明:您确定单行代码需要单独的函数

    【讨论】:

    • 其实抽象是值得创建单独的方法的。例如,它使可读性更好这一事实是好的。
    • 顺便说一下,清除位是:return number &= ~(1
    【解决方案3】:

    return number|(1&lt;&lt;position)”是否适用于所有情况

    如果positionth 位已经设置,并且我们尝试再次设置positionth 位,(position+1)th 位会发生溢出...

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 2022-01-02
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多