2017-01-04 222 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)。但是當我不輸入它時,它不會輸出並且不會出現錯誤。爲什麼這樣?位域。爲什麼沒有輸出?

+1

簡單地打印的作爲整數值無形的角色: '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:見This answer關於使用位域和char

1

不支持字符類型位域。

位字段聲明只支持4的標識符,

  • 無符號整型
  • 符號int
  • INT
  • 布爾

Source