我试图在 C 中连接两个二进制数。所以如果我有 1010
和 0011
我希望我的结果是 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/