Ros*_*nan 2 c binary printf bit-manipulation bitwise-operators
我试图在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;
}
Run Code Online (Sandbox Code Playgroud)
我知道打印的数字当然是十进制的,但我想在我的按位操作之后我会得到十进制等值的10100011,或者是163.但是,我的结果打印为16169.所以我想我的问题是......我在这里不明白这部分是什么?这只是对printf如何工作的误解,还是我的按位操作不正确?尝试用ints 做这个是一个问题吗?
你忘记了前缀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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
163
Run Code Online (Sandbox Code Playgroud)
在您的考试中,"二进制数"不是二进制数.第一个是正常的十进制数(1010),第二个是八进制数,因为前缀0是十进制的,所以第二个数字是:9
所以发生了什么:
1010 -> decimal
0011 -> octal
Run Code Online (Sandbox Code Playgroud)
第一个数字:
11 1111 0010
----------------- << 4
11 1111 0010 0000
Run Code Online (Sandbox Code Playgroud)
第二个数字( - >十进制 - >二进制):
octal decimal binary
0011 -> 9 -> 0000 1001
Run Code Online (Sandbox Code Playgroud)
而你的计算:
11 1111 0010 0000 first number
1001 second number
----------------- |
11 1111 0010 1001 = 16169
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13437 次 |
| 最近记录: |