2016-04-18 17 views
1

ASCIIエンコーディングが問題を起こすことがあると思うが、文字を減算するとどのくらいの問題が起こるかわからない。私は、比較的一般的なシナリオが次のいずれかを誤って評価する原因となることを知りたいと思います。考えるC++ char subtraction

std::string test = "B"; 
char m = 'M'; 

A)(m-'A')==12

B)(test[0]-'D') == -2

はまた、()77109にOFCを変更する小文字の値のための答えを変更していますか?

編集:標準は、標準の2.3が中に不明であるセクション、'2'-'0'==2は、すべての桁のため0-9を保持しなければならないが、私はそれがa-zA-Zのために保持しているかどうかを知りたいと言うと言って、char型の数字のためDigit subtraction答えこの質問を、私の読書。

編集2:質問をより明確にするために、アスキー固有のコンテンツを削除しました(申し訳ありません@πάντα-ῥεcontentのコンテンツ変更編集ですが、必要と感じています)。基本的には、基本セットの文字の順序付けを暗示しているようですが、一部のエンコーディングではその順序は維持されません。

+0

downvotes/close voteコメントしますか? http://stackoverflow.com/questions/36310181/char-subtraction-in-cそれは数字だけのための保持として標準を引用しているので、重複imhoではありません。 –

+0

'char'が符号なしの場合はどうなりますか? –

+0

@DavidSchwartz良い点ですが、私の例はすべて署名されています。 –

答えて

1

つまり、C/C++の文字はASCIIで保存されていませんか?

CまたはC++言語には、ターゲットシステムで使用される実際の文字コード表の概念がありません。唯一の規則は、'A'のような文字リテラルが現在のエンコードと一致することです。

EBCDICエンコードされた文字を扱うこともでき、コードはASCII文字と同じように見えます。

+0

基本的なアルファベットが連続しているという数字のような保証はありませんか?私。標準は '' 2 ' - ' 0 '== 2'を保証しますが、 '' C ' - ' A ''の保証はありません。 –

+0

@AdamMartinこれらは、純粋な文字エンコーディングテーブルで保証する必要があります。 'm == 77'のようなものはありません。 –

+1

'm == 77 'は保持されませんが、EBCDICでは' A-Z'などは連続していないことがわかります。 –