为什么以下程序不打印s字符?:
#include <stdlib.h>
#include <stdio.h>
int main(void) {
unsigned char s = '\0';
unsigned int bits[8] = {0, 1, 1, 1, 0, 0, 1, 1};
for (int i = 0; i < 8; i++) {
s ^= bits[i] << i;
}
printf("%c\n", s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我基本上试图s从位列表中创建字符.为什么我从这个程序中得到一些其他奇怪的角色?
您将按照它们在源中列出的位的相反顺序插入位.第二位将移位1,而不是6,依此类推.所以得到的数字是
1 1 0 0 1 1 1 0
Run Code Online (Sandbox Code Playgroud)
这是0xce,十进制206,因此非ASCII.
此外,使用XOR执行此操作非常奇怪,它应该只是常规的按位OR(|).
这是一个固定的尝试:
char s = 0;
const unsigned char bits[] = { 0, 1, 1, 1, 0, 0, 1, 1 };
for (int i = 0; i < 8; ++i) {
s |= bits[i] << (7 - i);
}
printf("%c\n", s);
Run Code Online (Sandbox Code Playgroud)
这打印s.