2012-02-14 3 views
1

私はmac osxのライオン(xcode4/clangの下で、gcc4.2で再現可能ですが)に取り組んで、奇妙な問題に直面しています。osx lionでは127のunsigned charに制限されていますか?

unsigned char変数には127以上の値を割り当てることはできないようです。だから、私は

v = (unsigned char) 156; 

または、単に

std::cout << (unsigned char) 231 << std::endl; 

を割り当てるときに私のプログラムは、任意の出力を生成しません。

私はこのコード

std::cout << "Unsigned chars range up to " << UCHAR_MAX << std::endl; 

を実行すると、私は次のような出力が得られます。

符号なし文字は、私がこのような何かを実行すると、プログラムは出力を生成し、しかし255

までの範囲毎回何らかの異なる任意の値(例えば、c = 114、c = 252など)に変換する。 のstd :: COUT < < "C =" < < 2 * C < <のstd :: ENDL(; < CHAR_MAX C、C++ unsigned char型のC = 0)ため 。 UCHAR_MAXにCHAR_MAXを変更

は、プログラムが再び出力せずに終了:(

事前

+1

あなたの理屈は貧弱です。コンソールではなく、デバッガを使用してデバッグします。 'v =(unsigned char)156;を試してください。 std :: cout <<(符号なし)v << '\ n'; '。 – ildjarn

+0

ありがとう!私はgdbの下で実行していた。 ( 'unsigned int')に型キャストすると助けになりました! –

答えて

2

coutのおかげでは、文字セット(まあ、それはしようとしていますから文字に数値を変換しています。 ...)あなたはそれがあなたの文字セットの有効な文字ではありません何も表示されませんし、技術的には、この決定の端末だ。

ではなくunsigned intにキャスト。

追加するには編集: ildjarnはあなたの質問に彼のコメントで非常に有効な点を作っています。デバッガでこれを実行した場合、実際に期待した値であることがわかります。

+0

"*代わりに' int'にキャストしてください。* "いいえ、代わりに' unsigned'にキャストしてください。 – ildjarn

+0

良いキャッチ - 時々脳に話していない指、ありがとう。 –

0

文字を表すためにどのようなシンボルが表示されますか?(unsigned char)231?ほとんどのシステムでは、これらは拡張文字で、特別な端末設定が目に見えても一貫したものとして表示される必要があります。

は、これを試してください

unsigned char testChar = (unsigned char)231; 
unsigned int testInt = (unsigned int)testChar; 
std::cout << testInt << std::endl; 
0

unsigned charの値は127に限定されるものではなく、しかし標準ASCIIのみ7ビット(そう128個の値)です。 127より大きい値は何らかの文字を表しません(何らかの種類のextended ASCIIを使用しない限り)。何も表示されません。

関連する問題