2016-06-01 5 views
-1

私はそれに格納されているchを混乱させるので。それはascii値または 'z'です。一部のサイトではasciiを保存していると言われています。答えを言って リンクは「Z」である:答えを言ってhttp://cprogrammingworld4u.blogspot.in/2011/07/chapter-1-getting-started.htmlchar ch = 'Z'はどのchに格納されますか?

リンクはASCIIです:Cでhttps://www.careercup.com/question?id=12511679

+1

あなたは本当に 'z'とz''のASCII値を区別しません。それらはメモリ内の全く同じオブジェクトのための有効なリテラルです。 –

+2

それは同じことです。 '' z''は 'z'の文字値の構文です。その値が何であるか知りたければ、単純に整数として出力してください。 –

+0

それはメモリ位置にascii値を格納します –

答えて

10

'z'は、あなたがASCIIマシンにしていると仮定すると(値122とタイプintの定数でありますあなたはおそらくそうです)。両方のあなたの情報源が一致しています - それは同じことです。

例として、気になるさまざまな方法ですべて印刷してください。プログラム例:それ

#include <stdio.h> 

int main(void) 
{ 
    char ch = 'z'; 
    char i = 122; 
    printf("%c %d\n", ch, ch); 
    printf("%c %d\n", i, i); 
    return 0; 
} 

ランは:

$ make example && ./example 
z 122 
z 122 
+0

** java **のために変更されますか?それはc –

+1

と同じですか?それは[Javaで類似しています](http://stackoverflow.com/questions/13849986/character-literal-in-java)です。 –

+0

あなたは答えがasciiと 'z'のどちらかであると言います –

0

答えは...両方です!ここでは、よりよく理解するのに役立つかもしれ抜粋です:

#include <stdio.h> 

int main(void) { 
    char ch = 'z'; 
    printf("%c\n", ch); 
    printf("%d\n", (int)ch); 
} 

あなたはcharとしてCH考えると、それはそれが格納されている、「Z」確かです。しかし、それをintにキャストすると、 'z'のASCII値は122になります。これは122です。

希望します。

+1

'int'へのキャストは不必要です:' printf'は、渡されるとき 'char'が自動的に' int'に昇格されることを意味する可変関数です。 –

+0

この答えは正しいが、少し誤解を招く。 '(int)'キャストは、デフォルト引数のプロモーションのために必要ではなく、どこでも実際の '変換'はありません。 –

+0

しかし、メモリ内では、 'z'またはascii値のいずれかしか変更されません。エクスプレッションが変更されます。 –

0

通常、ASCII値が格納されます。

したがって、charに対して整数演算を実行することは可能です。 ASCII値は、それを右のASCII文字にマップするために使用されます。それを増やしたり、減らしたりすることもできます。

#include <stdio.h> 

int main(void) 
{ 

char ch = 90; 
printf("%c\n\n", ch); 
ch = 64; 
for (int i = 0; i < 26; i++) 
{ 
    ch++; 
    printf("%c\n", ch); 
} 

} 

forループはA〜Zを出力します。すべての繰り返しでchの値を1ずつ増やしたところに注目してください。

私がchに番号を割り当てたことに気がついたら。私はそれに「z」を割り当てることさえできた。

完全な初心者の観点からは、すべてが「0」または「1」としてメモリに格納されていることを理解する必要があります。この0と1の読み込み不可能なシーケンスは、画面上に表示されるテキストに変換されます(デコードされます)。

+1

非常にペタンティックであるために、実行命令セットにその文字の値を格納します。通常はASCIIですが、*には*は​​ありません。あなたのプログラムは、例えば、EBCDICマシン上でナンセンスを印刷します。 –

+0

@CarlNorum私は必要な修正を行います:) –

0

'Z' us文字定数です。そのタイプはintです。あなたは

char c = 'Z'; 

を使用する場合cに格納された整数値は、あなたのコンパイラで使用される文字エンコーディングに基づいて異なる可能性があります。 ASCIIエンコーディングを使用する場合、'Z'のASCII表現がcに格納されます。これは90小数です。 EBCDICエンコーディングを使用している場合は、'Z'のEBCDIC表現をに格納します。これは、小数点以下の桁数になります。233です。

ポータブルプログラムを作成するには、cに格納されている整数値を無視する必要があります。あなたがそれらのエンコーディングの両方のために数えることができるいくつかのものがあります:

  1. '9' - '0'9

  2. 'Z' - 'A'に等しい私が使用している他のエンコーディングを認識していないです'z' - 'a'

に等しく、上記は真実ではない。

参考文献:Cで
ASCII encoding chart
EBCDIC encoding chart

+1

2と3は*保証されません*。リンクしたEBCDICチャートを見てください。 –

+1

@CarlNorum、確かに。知らせてくれてありがとうございます。 –

+1

新しい#2は保証されていますか?唯一の保証は数字が連続していることだと思った。 –

関連する問題