【解決方法】ビットマスクが 64 ビット値で機能しない。


だから私は完全に動作するこれらの機能を持っています:

C++
void pushw(int16_t x) {
	push((x & 0xFF00) >> 8);
	push(x & 0x00FF);
}

void pushd(int32_t x) {
	pushw((x & 0xFFFF0000) >> 16);
	pushw(x & 0x0000FFFF);
}

しかし、私がこれを行うとき:

C++
void pushq(int64_t x) {
	pushq((x & 0xFFFFFFFF00000000) >> 32);
	pushq(x &  0x00000000FFFFFFFF);
}

それはコンパイルされますが、メイン関数にあるすべての出力をスキップします。ここから、プッシュ関数も呼び出しています。 どうしてこれなの?

私が試したこと:

私は何も試していません。なぜ私の入力を聞かないのか完全に混乱しています。

解決策 1

あなたのコードを見てください:

void pushq(int64_t x) {
	pushq((x & 0xFFFFFFFF00000000) >> 32);
	pushq(x &  0x00000000FFFFFFFF);
}

それで pushq 通話 pushq、呼び出します pushq、これは … スタック スペースがなくなり、アプリがクラッシュするまで続きます。
電話するつもりだったの? pushd その代わり? その場合、一部のコンパイラでの警告を回避するために、値もキャストする必要があります。

コメント

タイトルとURLをコピーしました