gpt4 book ai didi

c - C 中的按位连接

转载 作者:行者123 更新时间:2023-12-02 06:57:40 24 4
gpt4 key购买 nike

我试图在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com