[ad_1]
C++のcharゼロと通常のゼロの違いは何ですか? 特にC++のことを意味します
例えば、
文字x=0;
int x=0;
そして char x=’0′
または「0」のように
それらすべての違いは何ですか?それらの正確な意味は何ですか?
私を助けてください :)
私が試したこと:
int x=0 が 0 であることはわかっています。
解決策 3
こんにちは、私は最新の C++ とそれが今日どのように厳密に型付けされているかについては最新情報を持っていません。
コンセプト
コンセプトは、宣言する型に応じてメモリ表現が変わるというものです。
Char は通常 8 ビットのメモリセルとして定義され、int は通常 32 ビットまたは 64 ビットとして定義されます
char x = <whatever>; //you are reserving 1 byte int x = <whatever>; //you are reserving (let's say) 4 bytes
C および C++ のリテラル「0」は、値 0 ではなく文字「0」を表します。たとえば、文字「0」の ASCII コードは 48 (10 進数)、Nul 文字はリテラル「\0」で表されます。代わりに「\x0」を使用してください。
使い方
これがどのように機能するかを理解するには、変数がコンピュータ内でどのように存在するかを想像してください。変数は RAM メモリの一部であり、変数にバインドされているメモリがアドレス 100 にあると仮定します。
これは変数を初期化する前の RAM です。その内容は未定義です。
100: ? 101: ? 102: ? 103: ?
これは、あなたが投稿したさまざまなバージョンがあなたの記憶の状態にどのように影響するかです。
文字x=0; 私はそれがあまり好きではありませんが、コンパイラにとっては問題ありません。
100: 0 101: (not allocated to x, cause is char that only use 1 cell) 102: (not allocated to x) 103: (not allocated to x)
int x=0; (それは良いことです、変換する必要はありません)
100: 0 101: 0 102: 0 103: 0
文字x=’0′; (それは良いことです、変換する必要はありません)
100: 48d (48 is decimal ascii code for characted '0')
文字 x = ‘\0’; (上記と同じですが、「\0」は ASCII NUL を表す文字リテラルです。これは、文字を 0 に初期化する場合の私の好みの方法です)
100: 0
int x = ‘0’; 右側の部分がリテラルなので、char 変数を int に代入することは許容できるため、これは好きではありません。
100: 48d (in this example the machine is little endian, LSB stored at lower address) 101: 0 102: 0 103: 0
解決策 2
Type ‘Char は、.NET Framework が Unicode 文字を表すために使用する System.Char 構造体のインスタンスです。Char オブジェクトの値は 16 ビットの数値 (序数) です。
Unicode 文字は、世界中のほとんどの書き言葉を表すために使用されています。」 [^]。
Type ‘Int は符号付き 32 ビット整数です。 .NET は、末尾にサフィックスのない ‘Int を宣言して初期化するときに、他の整数型への暗黙的な変換を提供します。割り当てた値に応じて、.NET は変数を ‘uInt、’ulong などの別の整数型にする場合があります。 参照: >[^]。
‘Int から ‘Char、または ‘Char から ‘Int に変換するには、キャストが必要です。
int i = 48; char c = '0'; char c1 = (char) i; int i1 = (int)c1; bool b1 = (int)c == (char)i; // true bool b2 = i1 == c1; // true
Unicode 文字は 16 ビット整数として表現できるため、これも機能します。
Int16 i = 48; char c = '0'; char c1 = (char) i; Int16 i1 = (Int16)c1; bool b1 = i1 == c1; bool b2 = (int)c == (char)i;
解決策 1
Char は、ASCII または UniCode という名前のコーディングを使用して文字やその他の記号を格納するために使用されます。UniCode は最新バージョンのコンパイラで ASCII をスーパーセットします。
ASCII – フリー百科事典ウィキペディア[^]
char x='0'; // and char x=48; // are the same thing.
[Update]
ASCII/UniCodeコーディングが入出力に使用されます。
キーボードで 0 を入力するとコード 48 が返されますが、コードでは 48 よりも「0」を使用する方が簡単です。
ASCII/UniCode コーディングは、C、C++、C#、VB、Java、JS、その他の言語で使用されます。
[Refinement]
コンピュータでは、画面 (コンソール モード)、キーボード、ファイルはすべて ASCII/UniCode を使用してすべての文字をエンコードしています。
これは、メモ帳に 0 を入力してファイルを保存すると、ファイルには 48 という 1 つの値が保持されることを意味します。「My name is Bond」と入力すると、ファイルには 77,121,32,110,97,109,101,32,105,115,32,66,111,110,100 が保持されます。
コード内で 0、1、2 … が表示される場合、その値は計算に使用されないことを意味します。
コード内に「0」、「1」、「2」… がある場合、それはキーボード入力を確認するため、またはその文字を画面に表示するために、入力/出力に関連していることを意味します。
48、49、50…よりも、「0」、「1」、「2」の方が読みやすいです。
77,121,32,110,97,109,101,32,105,115,32,66,111,110,100よりも「My name is Bond」の方が読みやすいです。
解決策 7
/**
*
* コトリン
*
**/
val charZero: Char=”0″ // リテラル「0」を使用した文字ゼロ表現
val zeroNormal: Char=”\u0030″ // Unicode 値 ‘\u0030’ を使用したゼロ正規表現
println(charZero)
println(ゼロノーマル)
// 等しいかどうかをチェックする
val isEqual = charZero == zeroNormal
println(“それらは等しいですか? $isEqual”)
[ad_2]
コメント