这是我的字符位表示程序。但我不知道它是否表明我是对还是错呢?有可疑单位(红色)。
你能解释一下这是什么(如果它是正确的)或我的代码有什么问题,如果这些单位不应该。感谢
#include "stdafx.h"
#include "iostream"
using namespace std;
struct byte {
unsigned int a:1;
unsigned int b:1;
unsigned int c:1;
unsigned int d:1;
unsigned int e:1;
unsigned int f:1;
unsigned int g:1;
unsigned int h:1;
};
union SYMBOL {
char letter;
struct byte bitfields;
};
int main() {
union SYMBOL ch;
cout << "Enter your char: ";
while(true) {
ch.letter = getchar();
if(ch.letter == '\n') break;
cout << "You typed: " << ch.letter << endl;
cout << "Bite form = ";
cout << ch.bitfields.h;
cout << ch.bitfields.g;
cout << ch.bitfields.f;
cout << ch.bitfields.e;
cout << ch.bitfields.d;
cout << ch.bitfields.c;
cout << ch.bitfields.b;
cout << ch.bitfields.a;
cout << endl << endl;
}
}
答案 0 :(得分:5)
答案 1 :(得分:3)
位字段不可移植。最大的问题是你不知道将各位分配给各个位字段的顺序,但你甚至不知道该结构是否具有1,2或任何其他数量的字节。
我建议使用unsigned char(因为你不知道char是有符号还是无符号),并使用像(ch&amp; 0x80)!= 0,(ch&amp; 0x40)!= 0等代码。