問題タブ [sign-extension]

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.

0 投票する
6 に答える
3885 参照

c - 符号付き右シフト = 奇妙な結果?

私は誰かの宿題を手伝っていて、この奇妙な問題に遭遇しました。問題は、符号付き整数のバイトの順序を逆にする関数を作成することです (とにかく関数が指定された方法です)。これが私が思いついた解決策です:

この関数に渡す0xFF000000と、最初の代入は になり0xFFFFFFFFます。何が起こっているのかよくわかりませんが、署名付きと未署名の間の変換、またはそのようなものと関係があることは知っています。

追加ulすると正常に0xFF動作します。これは、強制的に署名なしに変換されてから、署名付きまたはその方向の何かに変換されるためだと思います。結果のコードも変更されます。指定子がないul場合は sar(算術右シフト) を使用しますが、符号なしでは意図したとおりに shr を使用します。

誰かが私のためにこれに光を当てることができれば、本当に感謝しています。私はこのことを知っているはずであり、知っていると思っていましたが、ここで何が起こっているのか本当にわかりません.

前もって感謝します!

0 投票する
1 に答える
25221 参照

assembly - 署名付き/未署名のロードおよびストア命令 (MIPS) に関する明確化

Google の助けを借りて教科書を手にしても、これらの概念を理解できないようです。

フォーマット(opcode、rs、rt、offset)に従って...

  • アドレスの値に追加する前に、オフセットを符号拡張しますか? それとも拡張する前に追加しますか?
  • lblbuの場合、違いは何ですか? また、「符号なし」はオーバーフローを報告しないことを意味するという MIPS 算術定義にも従っていますか?
  • lwに署名されていないバージョンがないのはなぜですか? お店の説明書にも記載がない…
0 投票する
1 に答える
6147 参照

assembly - movzwl、%ax、および負の値による奇妙な結果

さて、私は次のコードスニペットを扱っています:

したがって、正の値を扱う場合、これは期待どおりに動作します。%edx にコピーされる値は、%eax (または %ax) の末尾の 16 ビットです。

ただし、負の数を入れると、すべてがおかしくなり始め、期待どおりに動作していないように見えます。

たとえば、%eax の値が -67043552 の場合、%edx にコピーされる値は 65312 です。

組み立て初心者ですので、私の勘違いでしたら申し訳ありません。どんな助けでも大歓迎です。

0 投票する
1 に答える
9564 参照

assembly - アセンブリ言語:cbw

cbwコマンドが実際に何をするのかわかりません。コードのスニペットがあります:

cbw後にaxの値はどのように変化しますか?

0 投票する
4 に答える
446 参照

c - 符号拡張の必要性とは?

次のCコードを検討してください-

それには-

  1. 2 番目のパラメーターを符号拡張に変換します。
  2. 署名された拡張パラメーターを b としてスタックにプッシュします。
  3. 最初のパラメーターを符号拡張に変換します。
  4. 署名された拡張パラメーターを a としてスタックにプッシュします。
  5. a&bを足して、結果をcharにキャストしてcに格納する。
  6. C は再び符号拡張されます。
  7. 符号拡張された c は戻り値レジスタにコピーされ、関数は呼び出し元に戻ります。
  8. 結果の呼び出し元関数を再度格納するには、int を char に変換します。

私の質問は -

  1. 誰がこれをしますか?
  2. そんなに多くの変換を行う必要性は何ですか?
  3. マシン/コンパイラのパフォーマンスを低下/向上させますか?
  4. パフォーマンスが低下している場合、パフォーマンスを向上させるにはどうすればよいですか?
0 投票する
2 に答える
13331 参照

constants - MIPS で符号拡張定数をシフトする

MIPS の分岐命令で符号拡張された 16 ビット定数を 2 シフトするのはなぜですか? 私はこの考えに混乱しています。このシフトは、符号拡張された 16 ビット定数にどのような利点をもたらしますか。ここに写真があります:

ここに画像の説明を入力

よろしく

0 投票する
1 に答える
259 参照

c++ - sprintf で 16 進数値を表示するポータブルな方法

バイナリから (印刷可能な) ヘキサへの変換で問題が発生しました。コードを書くための(私のシステムにとって)機能的な方法に達しましたが、それがすべてのシステム(OSとハードウェア)で移植可能かどうかを知る必要があります。

これが私の関数です(バイナリテキストからUUIDを構築しようとしています):

unsigned charの代わりにcharを使用すると、符号拡張のために値がうまく出力されないことを理解しました(C++はバイナリファイルを読み取り、hexに変換します)。それぞれ承認および変更されました。

しかし、私はこれを行うより多くの変種に遭遇しました: Conversion from binary file to hex in C、そして私は本当に迷っています。アンワインドのコードでは:

配列が unsigned char であるにもかかわらず (質問をした人によって元の投稿コードで定義されているように)、unsigned intへのキャストが必要であり、変換するバイトのビットごとの ANDが必要な理由がわかりませんでした...

符号拡張のことをよく理解していなかったので、少なくとも私が書いたコードがすべてのシステムで動作するかどうか教えていただけますか?

0 投票する
1 に答える
343 参照

c++ - 間違った符号拡張 c++/qt

デスクトップ x64 Intel アーキテクチャ (gcc コンパイラ、linux) と RaspberryPi Arm (gcc クロス コンパイラ) で次のコードを実行しています。

refはQByteArrayです

quint32 (unsigned int) をキャストしたにもかかわらず、指定されたバイトが負の数の場合、私の PC はエラーを引き起こす符号拡張を行うことに気付きました。私のコードは Arm で問題なく動作します。なぜこれが起こるのですか?キャストはこれを防ぐべきだと思いました。そうじゃない?

分解:

また、コンパイラが char の代わりに QByteRef の戻り値を使用していることにも気付きました。しかし、それは私が推測するエラーを引き起こすべきではありません。

QByteArrayヘルプページから:

前もって感謝します