【问题标题】:How to edit single bits from an unsigned char如何从无符号字符编辑单个位
【发布时间】:2019-12-03 14:26:34
【问题描述】:

我的目标是编写一个函数,它接收一个无符号字符作为输入,并返回一个修改后的无符号字符作为输出。

应该修改 char,使其前三位设置为零,其余的保持不变。下面编写的示例函数。

非常感谢任何帮助。抱歉,这个问题有些不完整,这是我能给出的最准确的描述。

unsigned char Changebits(unsigned char b)
{
    //set the first three bits of the input to zeros (for example 10110111 -> 00010111)
    return //insert the modified unsigned char here
}

【问题讨论】:

  • b & 0x1f /*0b00011111*/
  • return (b & 0x1Fu)
  • 全错了,如果你想将 unsigned char3 个第一位 归零,正确的掩码是 UCHAR_MAX >> 3 :D

标签: c char bit unsigned


【解决方案1】:

请阅读 C 语言中有关 bitmanipulation 的内容。 所以你的解决方案看起来像这样(假设 1 字节字符)

unsigned char Changebits(unsigned char b)
{
    return (b & 0x1Fu);
}

【讨论】:

    【解决方案2】:
    unsigned char Changebits(unsigned char b)
    {
        return b&0x1F;
    }
    

    【讨论】:

    • 添加一些解释以改进您的答案。 :)
    【解决方案3】:

    我假设您知道bitwise AND 操作。

    假设我们有 10110111 作为输入。要使前三位数字为 0,我们可以简单地对其进行按位运算,其中前三个位置包含 0,其余位置 (00011111) 包含 1。

    unsigned char Changebits(unsigned char b)
    {
        unsigned char modifier = 31; //00011111in binary is equal to 11100000 in decimal
        return b & modifier; // in c '&' represents bitwise AND operation
    }
    

    定义修饰符的另一种很酷的方法是:

    unsigned char modifier = (1<<5)-1; //using bitwise left shift
    

    【讨论】:

      猜你喜欢
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      相关资源
      最近更新 更多