2017-01-04 2 views
1
#include <iostream> 
using namespace std; 
struct bitfield 
{ 
    unsigned char a : 3, b : 3; 
}; 

int main() 
{ 
    bitfield bf; 
    bf.a = 7; 
    cout << bf.a; 
    char c; 
    cin >> c; 
    return 0; 
} 

저는 최신 컴파일러에서 VC++를 사용하고 있습니다. 내가 bf.a를 int 형으로 변환하면 원하는 결과를 얻을 수 있습니다 (7). 그러나 내가 그것을 던지면 안된다. 출력이없고 오류가 없다. 왜 그래야만하지?Bitfields. 출력이없는 이유는 무엇입니까?

+1

단순히 등의 정수 값을 출력 INT 서명 단지 4 식별자를 지원 보이지 않는 성격 : 'cout << (int) bf.a; ' – Raindrop7

답변

1

내가 bf.a를 int 형으로 변환하면 원하는 결과가 출력됩니다 (7). 하지만 형식을 지정하지 않으면 출력이없고 오류가 발생하지 않습니다. 왜 그렇게 입니까?

문자 (숫자 7)가 콘솔에 기록되었습니다. 문자 7은 bell character입니다.


그래서 볼 수는 없지만들을 수 있습니다. 아니면 프로그램을 실행했을 때 Windows 10에서 알림 소리를들을 수있었습니다.

cout << '\a'; 

escape sequences으로 참조 될 수있는 문자의 그룹의 일부이다 :

동일한 출력을 생성한다. 이 경우에는 char 비트 필드의 사용은 표준이 보장되지 않는다는


참고. char 비트 필드의 사용에 관한 질문은 here을 참조하십시오.

2

값이 7 인 캐릭터를 인쇄하고 있습니다. 다른 사람들은 일반적으로 표시되지 않는 특수 문자라고 지적했습니다. 문자가 아닌 값을 표시하려면 값을 int 또는 다른 비 char 정수 유형으로 변환하십시오. the ascii table을 보시면 문자 7이 벨 (벨)임을 알 수 있습니다.

#include <iostream> 
using namespace std; 
struct bitfield 
{ 
    unsigned char a : 3, b : 3; 
}; 

int main() 
{ 
    bitfield bf; 
    bf.a = 7; 
    cout << (int)bf.a; // Added (int) here 
    char c; 
    cin >> c; 
    return 0; 
} 

편집 1 : bf.a 단지 3 비트이기 때문에, 어떤 디스플레이 특성 값으로 설정 될 수 없다. 크기를 늘리면 문자를 표시 할 수 있습니다. 46으로 설정하면 마침표가됩니다.

#include <iostream> 
using namespace std; 
struct bitfield 
{ 
    unsigned char a : 6, b : 2; 
}; 

int main() 
{ 
    bitfield bf; 
    bf.a = 46; 
    cout << bf.a; 
    char c; 
    cin >> c; 
    return 0; 
} 

편집 2 : 사용 비트 필드와 char에 대해 This answer를 참조하십시오.

1

문자 유형 bitfield는 지원되지 않습니다.

비트 필드 선언

  • 부호 INT
  • INT
  • BOOL

Source