私は配列を持っています:
int arr[]={'1','2','4','8','16','32','64','128'};
そして、私はそれをこの行で呼んでいます:
a=arr[a];
ただし、目的の出力が得られません。入力は期待どおりですが(これを確認しましたが、0〜7になります)、49,50,52,56,49,51,54,49入力に応じて出力が出力されます。私は何を間違えましたか?
編集:引用符はASCIIを意味します。簡単なことを見逃していたことはわかっていました。
出力は正しいです。'1'49は、たとえば配列の最初のエントリとして持っている文字のASCII値です。
配列の初期化子は値ではなく文字リテラルでintあるため、配列には各文字リテラルの数値が入力されます(などのマルチバイト文字リテラル'32'は許可されますが、その値は実装定義です。割り当ての結果を判別する方法を参照してください。複数文字のchar定数からchar変数へ?)。
目的の出力を取得するには、intリテラルを使用します。
int arr[]={1,2,4,8,16,32,64,128};
この宣言int arr[]={'1','2','4','8','16','32','64','128'};では、文字列として宣言しているため、ASCII 値を格納しています。したがって、49for 1、50for 2、52for 4、56for 8、49for 1of 16、51for 3of 32、54for 6of 64、および49for 1of128の値は、配列にインデックスを付けるときに取得されます。
int arr[]={'1','2','4','8','16','32','64','128'};arr配列をcharではなくとして
宣言する必要がありますint。
文字ではなく数字を取得する正確な理由は、使用している出力ライブラリがintパラメーターで呼び出されるためです。それから、ライブラリは、与えられたデータを解釈して数値として表示する必要があることを理解します。
また、取得している数値は、配列内の値に相当するASCIIまたは数値です。