問題タブ [signedness]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 負の char 値を 16 進数で表すにはどうすればよいですか?
次のコード
「データ型の範囲が限られているため、比較は常に false です」というコンパイラ警告を表示します。チェックを次のように変更すると、警告が消えます
これは非常に直感に反するように感じます。char
16 進数の特定のバイト値に対して aをチェックする正しい方法は何ですか? (無署名にする以外)
c - 整数の符号が本当に重要なのはいつですか?
変換と操作がCで定義される方法のため、符号付き変数と符号なし変数のどちらを使用するかはめったに問題にならないようです。
では、どの条件で変数の符号が実際に違いを生むかを判断するための一連のルールはありますか?
integer - Java整数を4バイトで別のアプリケーションに送信する方法は?
モードを 4 バイトに変換して、ソケット経由で別のアプリケーションに送信するさまざまな方法を試しました (コメント付きのコードからわかるように)。127 までの整数でうまく機能し、256 を超える整数でもうまく機能します。署名されている Java 型と関係があると思いますが、機能しないようです。以下は、プログラムが出力するものの例です。
1 バイトが 32 ビットを格納できるようになったのはなぜですか? どうすればこれを修正できますか?
c - unsigned char* 文字列を #define するにはどうすればよいですか?
私は自分のコードで次のように定義しています
関数で送信したいcom_reply(unsigned char* msg, uint16_t lenght)
。
ここで、引数の符号が異なるという警告が表示されます。私は問題が何であるか、またなぜ代わりに をcom_reply
使用するのかを知っています。知りたいだけです:unsigned char*
char*
unsigned char*
文字列を として定義して、プログラム全体で警告を表示することなく使用できるようにするにはどうすればよいですか。
編集:
厳密に言えば、ここには複数の定義があります。主な理由はBANNER
、次のように、他のいくつかの定義で構成される定義があるためです。
ここで定義を使用する代わりに、const 変数を作成し、プログラムの開始時にそれらを連結する必要がありますか?
cpu-registers - 6502 は符号付きまたは符号なしの 8 ビット レジスタ (JAVA) を使用しますか?
私は 6502 用のエミュレーターを作成していますが、基本的に、レジスターの 1 つ (主に X と Y) にオフセットが保存されている命令がいくつかあり、分岐命令は符号付き 8 ビット整数を使用するため、レジスタは値を 8 ビット符号付きのままにしますか? これを意味する:
この状況で x = 0xEE としましょう。通常のバイナリでは、これは x = 238 を意味します。ただし、6502 では、分岐命令はメモリ アドレスへのジャンプに符号付きオフセットを使用するため、この場合 238 は -18 として解釈されるのか、それとも単に通常の符号なし 8 ビット値?
c - 型変換 - unsigned から signed int/char へ
以下のプログラムを実行してみました。
このプログラムでは、次の出力が得られます。
文字は違います!!! intは同じです!!!
両方で異なる出力が得られるのはなぜですか?
出力は次のようになりますか?
文字は同じです!!! intは同じです!!!
コードパッド リンク。
c# - System.Net.IPAddress が符号付きの型を使用するのはなぜですか?
メソッドIPAddress(Int64)
とメソッドInt32 HostToNetworkOrder(Int32)
はSystem.Net.IPAddress
両方とも、IP アドレスに署名付きの型を使用します。
HostToNetworkOrder
これにより、コンストラクターへのパラメーターとして使用するときに結果をキャストする必要がIPAddress
生じ、次のようなコードになります。
network-order 値が unsigned でない場合、192.168.0.255 などのアドレスで ArgumentOutOfRangeException が発生します。IPAddress(Int64)
これは、0x00000000FFFFFFFF よりも大きい値を受け入れないこと が原因である可能性がありますが、(net-order)192.168.0.255 の Int64 表現は、 Int32 からの変換時に 0xffffffffff00a8c0 になりますか?
IPアドレスに署名の概念がない場合でも、署名されたタイプを使用することに意味はありますか? 符号なしの型を使用する方がはるかに簡単なようです。
署名された型が選択された特定の理由はありますか?
c++ - char の署名に関する問題
標準によると、char
署名されているかどうかは実装定義です。これは私にいくつかの問題を引き起こしました。次にいくつかの例を示します。
1) 最上位ビットのテスト。が署名されている場合char
、単純に値を と比較できます0
。署名されていない場合は、代わりに値を比較します128
。2 つの単純な方法はどちらも一般的ではなく、両方のケースに適用されます。移植可能なコードを書くためには、ビットを直接操作しなければならないようです。
2) 値の割り当て。値にビット パターンを書き込む必要がある場合がありchar
ます。が符号なしの場合char
、これは 16 進表記を使用して簡単に実行できますchar c = 0xff
。char
ただし、署名されている場合、この方法は適用されません。例を挙げてみましょうchar c = 0xff
。0xff
署名済みが保持できる最大値を超えていますchar
。このような場合、標準では、 の結果の値c
は実装定義であると規定されています。
では、この 2 つの問題について何か良いアイデアをお持ちの方はいらっしゃいますか? 2つ目に関してはchar c = '\xff'
、 signed と unsigned の両方でOKなのか気になりchar
ます。
注:明示的なビット パターンを文字に書き込む必要がある場合があります。http://en.cppreference.com/w/cpp/string/multibyte/mbsrtowcsの例を参照してください。