Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

extend32_s: Wasm numerische Anweisung

Die extend32_s numerische Anweisung sign-erweitert die unteren 32 Bit eines 64-Bit-Integers, um dessen Vorzeichen im gesamten Wert zu propagieren.

Probieren Sie es aus

(module
  (import "console" "log" (func $log (param i64)))
  (func $main

    i64.const 0xffffffff
    i64.extend32_s
    call $log

  )
  (start $main)
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), { console });

In diesem Beispiel schiebt i64.const 0xffffffff den Wert 0xffffffff (4294967295) auf den Stack. Dieser Wert stellt -1 dar, wenn er als Vorzeichen-32-Bit-Zahl gelesen wird; i64.extend32_s sign-erweitert ihn zu 0xffffffffffffffff — was -1 als vollständiger 64-Bit-Vorzeichen-Integer darstellt.

WAT-Syntax

i64.extend32_s
i64.extend32_s

Die i64.extend32_s-Anweisung.

Unmittelbare Werte

Keine.

Operand-Stack

[input: i64] -> [output: i64]
input

Der Eingabewert i64 Integer.

output

Der Ausgabewert i64 Integer.

Binärcodierung

Anweisung Binärformat Beispieltext => binär
i64.extend32_s 0xc4 i64.extend32_s => 0xc4

Beschreibung

Die Vorzeichenerweiterung ist nützlich, da die Wasm-Integer eine feste Breite haben (32- oder 64-Bit), aber oft mit kleineren Werten — wie einem i8, i16 oder i32 — gearbeitet werden muss, die darin gespeichert sind. Wenn Sie einen negativen kleinen Wert mit Nullen auffüllen, um den Rest der Bits zu füllen, erhalten Sie die falsche Zahl: Das Bitmuster, das -1 als 32-Bit-Wert darstellt, stellt beispielsweise nicht mehr -1 dar, wenn Sie ihn auf 64 Bit mit Nullen aufgefüllt haben.

Die extend32_s-Anweisung behebt dies, indem sie die unteren 32 Bit des Wertes nimmt, sie als Vorzeichen-32-Bit-Integer behandelt und das Vorzeichenbit (Bit 31) durch alle restlichen Bits des i64 kopiert.

Dies ist nützlich, wann immer Sie einen 32-Bit-Wert geladen oder produziert haben (zum Beispiel aus einem vier-Byte-Wert im Speicher) und Sie ihn korrekt in arithmetischen Operationen mit voller 64-Bit-Breite verwenden müssen.

Spezifikationen

Spezifikation
WebAssembly Core Specification
# numeric-instructions%E2%91%A6

Browser-Kompatibilität

Siehe auch