2017-08-22 10 views
0

理解しようとしていますが、完璧な答えを得ることができません。符号なしの文字に整数値を代入する

#include<iostream> 
using namespace std; 

int main(){ 

    unsigned char ch = '150'; 
    int count=0;//just to get a count for the loop 
    cout << (int)ch<<endl; 
    for (int i = 0; i <= ch * 2; i++){ 
     cout << "Hello" << endl; 
     count++; 
    } 
    cout << count; 

    return 0; 
} 

私が割り当てています:

unsigned char ch = '250'; 

を同じ出力を印刷している場合。私は出力から理解していますと、それは数すなわち0の最後のインデックスを取り、そして

unsigned char ch = '186'; 

48は、54のように私に整数値を与えるようASCIIルックアップテーブルから私に整数値を与えている、ということです(数6のASCII値である)

unsigned char ch = '154'; 

は、(数2のASCII値である)、52として私に整数値を与えます

は正しい私の理解ですか?これは一重引用符でunsigned charに割り当てられた任意の番号に適用されますか? I have attached the screenshot of the Ascii look up table

エラーや警告は表示されません。 No error in the compiler

+1

'unsigned char型のCH = '150'、 '? –

+0

私はビジュアルスタジオを使用しています。2015 –

+0

一重引用符は、ASCII文字をその値に変換します。数値を割り当てる場合は、他のintと同じように行います。 a.k.a. 'ch = 150' – litelite

答えて

1

あなたは、単一引用符の周りに値を巻いているのでいいえ、それはマルチ文字定数になり、それが価値だ、それは文字のいずれかの指標とは何の関係もありませんので、を定義し実装です、文字が含まれていないためです。

あなたが値150をしたい場合は、

unsigned char c = 150; 

が道です。

あなたがそれを持っている方法、それはタイプだ確かintであり、あなたがunsigned char厳密に言えば、そのコンパイラはそのための警告を出すかもしれない、と複数文字定数が非であることのために別のもので、このような値を格納することはできません - ポータブル

一般に、コンパイラが事前に警告していることが分かっていないかぎり、警告を無視しないでください。そのような場合は、状況に応じて適切な処置を講じてコンパイラが無視します。

0

unsigned char文字リテラルを宣言するためにいくつかの方法があります:あなたはあなたのVARは数としてではなく、文字として印刷されintにキャスト場合

unsigned char ch1 = 150; 
unsigned char ch2 = 0x96; 
unsigned char ch3 = '\150'; 
unsigned char ch4 = '\x96'; 
unsigned char ch5 = '\0226'; 
unsigned char ch6 = 0226; 
unsigned char ch7 = 0b10010110; 

は、アプリケーション

で最も読みやすいものを選択します。 。 あなたがキャラクターをしたい場合は、間に大きな差があります

cout << ch << endl; 
+0

そして、 'unsigned char ch5 = 0226'はどうでしょうか?そしてそれは 'unsigned char ch6 = '\ 226''と等価です。 –

+0

私は 'some'について話しましたが、完全なリストではありません。しかし、いくつかの可能性を追加しました。 –

0

キャストしないでください:あなたがいる限りchがchar型のものであり、あなたはそれを割り当てるよう、私に最初の行を見ることができるように

unsigned char ch = '150'; // wrong way 
unsigned char ch = 150; // correct way (conversion from integer to char according to ASCII standard) 

を文字列(マルチ文字定数)。ここでは変換がintへのASCIIまたは逆から発生しませんが、顔にあなたは、コンパイラから警告を受ける:

warning C4309: 'initializing' : truncation of constant value 

正しい方法は、1つの文字変数に一つだけの文字を割り当てることです:

unsigned char ch = '1'; // or any other character. 
第二の文で

:コンパイラはASCII表に従って文字に変換しますので、値150以上

unsigned char ch = 150; 

は、整数値ではない文字列です。 ûです。

別の例:

char ch = 65; // which is capital a `A` in ASCII. 
std::cout << ch << std::endl; // A 
関連する問題