我试图在 C 中连接两个二进制数。所以如果我有 10100011 我希望我的结果是 10100011 。我写了一个简短的例程,我认为可以完成这项工作:

#include <stdio.h>

int main(void) {
    int first = 1010;
    int second = 0011;
    int result = (first << 4) | second;
    printf("%d", result);
    return 0;
}

我知道打印的数字当然是十进制的,但我想在我的按位运算之后我会得到 10100011 的十进制等效值,或者 163。但是,我的结果打印为 16169。所以我猜我的问题是……我在这里不明白这其中的哪一部分?这只是对 printf 如何工作的误解,还是我的按位运算不正确?尝试用 int 来做这件事有问题吗?

最佳答案

你忘记了前缀 0b ,所以这应该对你有用:

#include <stdio.h>

int main() {

    int first = 0b1010;
              //^^v See here
    int second = 0b0011;
    int result = (first << 4) | second;
    printf("%d", result);

    return 0;

}

输出:
163

在您的示例中,“二进制数”不是二进制数。第一个是普通的十进制数( 1010 ),第二个是八进制数,因为前缀 0 所以十进制的第二个数字是: 9
所以发生的事情是:
1010 -> decimal
0011 -> octal

第一个数字:
     11 1111 0010
----------------- << 4
11 1111 0010 0000

第二个数字(->十进制->二进制):
  octal    decimal       binary
  0011  ->    9     ->  0000 1001

而你的计算:
11 1111 0010 0000   first number
             1001   second number
----------------- |
11 1111 0010 1001 = 16169

关于c - C 中的按位连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28180015/

10-11 21:31