c - C 中二进制表示的按位运算符

标签 c binary bitwise-operators

我有一个数字的二进制表示形式,作为字符数组,最多 18 位长。我需要使用按位运算符将右侧的三位和剩余的位存储到两个不同的字符串中。

例如,我有一个包含“00000000011101”的字符数组。我需要一个函数来存储“101”(最后三位)并存储“00000000011”(剩余位)。

但是,这必须使用按位运算符来完成。所以我知道我需要将字符串转换为 int,然后进行移位,但我不知道如何去做。

非常感谢您的帮助。

最佳答案

将字符串转换为int很简单:从零开始 int ,然后检查二进制表示的字符,并检查它是零还是一。首先,将部分结果左移。然后,如果该数字为 1,则将结果与 1 或。继续下一个字符。当您看到空终止符'\0'时,停止。

这是一些伪代码:

res = 0
ptr = "00000000011101"
while ptr is not pointing to '\0'
    res <<= 1;
    if ptr points to '1'
        res |= 1;

一旦您拥有 int ,获取最后三位相当于与 & 进行 AND 运算结果为 7(其二进制表示为 0000111 )。获取其余位相当于移位 >>数字正好是三。

这是一些伪代码:

lastThree = res & 7
topBits = res >> 3

关于c - C 中二进制表示的按位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23527708/

相关文章:

c - 如何在较高范围的回调中导出结构?

c - C 中的多线程使用线程安全随机数

algorithm - 简化 Z = X ^ (X << Y) 函数的反函数

javascript - 从二进制到字符码再到文本 javascript

c++ - 如何避免按位运算的积分提升

c - 命令运行两次时 gdb 得到不同的结构大小

对 htonl 输出感到困惑

language-agnostic - 是否有任何语言具有一元 bool 切换运算符?

c - 身份属性的位操作

c - 如何使用循环打印多个最大值