奇怪的结果是c中的按位程序

Sal*_*din -3 c bit-manipulation

写下面的代码给我奇怪的答案

#include <stdio.h>

int main (void)
{
    char a=0x03 ,b=0x01 ,x;

    printf("Enter two numbers : \n");
    scanf("%c %c",&a,&b);
    printf("0x%x 0x%x\n",a,b);
    printf("0x%x || 0x%x = 0x%x \n0x%x ^ 0x%x = 0x%x\n0x%x << 0x%x = 0x%x\n0x%x >> 0x%x = 0x%x\n",a,b,a||b,a,b,a^b,a,b,a<<b,a,b,a>>b);
    scanf("%i",x);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果

Enter two numbers :
2 3
32 33 
0x32 || 0x33 = 0x1
0x32 ^ 0x33 = 0x1
0x32 << 0x33 = 0x1900000
0x32 >> 0x33 = 0x0
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它确实将错误的值带入a和b虽然我已经尝试使用int并且它运行良好?!

Nim*_*Nim 5

问题出在这里:

scanf("%c %c",&a,&b);
Run Code Online (Sandbox Code Playgroud)

查看文档scanf(),看看%c应该是什么.你会发现它不是一个整数.因此,即使您输入23,格式说明符也会以一种意想不到的方式对待您.一旦你明白了什么%c,其余的将是清楚的.