2014-10-29 3 views
1

다음은 문자의 비트 표현을위한 프로그램입니다. 그러나 나는 그것이 옳고 그른 표현을 보여주고 있는지 모른다. 의심스러운 단위 (붉은 색)가 있습니다. 문자의 비트 표현 C++

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; 

    } 
} 
+0

이 코드는 코드가 정확하므로 자원 요청 (여기서는 ASCII 문자 값 표)으로 축소되어 나타납니다. – Useless

+0

@Useless : 포스터 _believes_은 버그이므로 다시 가져올 수 있습니다 주제에. –

+0

그건 그렇고, 컴퓨터 용어는 일반적으로 "바이트"대신에 "바이트"라고 쓰여져 있습니다 –

답변

5

ASCII 표는 얻고 출력 이해를 참조하십시오 :

enter image description here

  • a는 97 진수 값을 가지고, 그리고 97 진수
  • b에 01,100,001입니다 10 진수 값이 98이고 97가 01100010의 이진수입니다.

등등.

+0

이 이해되었습니다. 감사합니다 – Luchnik

3

비트 필드는 이식 가능하지 않습니다. 가장 큰 문제는 비트가 개별 비트 필드에 할당되는 순서를 알 수 없지만 구조체에 1, 2 또는 다른 바이트 수가 있는지 실제로 알지 못하는 것입니다.

I 좋겠 (당신이 문자 서명 또는 서명 여부를 알 수 없기 때문에) 서명 숯불을 사용하고 (CH &을 0x80)! = 0, (CH & × 40)과 같은 코드를 사용하는 것이 좋습니다! = 0 등

+2

좋은 지적 - 당신이 적절한 결과를 얻었 기 때문에 코드가 좋다는 것을 의미하지는 않습니다. –

+0

그리고'char'는 정확히 8 비트를 보장하지 않기 때문에 필요한 비트 필드의 수를 알 수 없습니다. –