字符C ++的位表示

时间:2014-10-29 16:52:20

标签: c++ bit-manipulation bit

这是我的字符位表示程序。但我不知道它是否表明我是对还是错呢?有可疑单位(红色)。

enter image description here

你能解释一下这是什么(如果它是正确的)或我的代码有什么问题,如果这些单位不应该。感谢

#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;

    }
}

2 个答案:

答案 0 :(得分:5)

请参阅ASCII表以了解您获得的输出:

enter image description here

  • a的十进制值为97,而二进制
  • 中的97为01100001
  • b的十进制值为98,而二进制
  • 中的97为01100010

等等。

答案 1 :(得分:3)

位字段不可移植。最大的问题是你不知道将各位分配给各个位字段的顺序,但你甚至不知道该结构是否具有1,2或任何其他数量的字节。

我建议使用unsigned char(因为你不知道char是有符号还是无符号),并使用像(ch&amp; 0x80)!= 0,(ch&amp; 0x40)!= 0等代码。