typestar

i64 y cambios de ancho en WebAssembly

Doblar el ancho es explícito en ambas direcciones.

(module
  ;; i64 doubles the width; extend and wrap cross between the sizes.
  (func (export "square_wide") (param $n i32) (result i64)
    (local $wide i64)
    (local.set $wide (i64.extend_i32_s (local.get $n)))
    (i64.mul (local.get $wide) (local.get $wide)))

  ;; Wrapping keeps the low 32 bits and drops the rest.
  (func (export "low_bits") (param $big i64) (result i32)
    (i32.wrap_i64 (local.get $big)))

  (func (export "millis_to_secs") (param $ms i64) (result i64)
    (i64.div_u (local.get $ms) (i64.const 1000))))

Cómo funciona

  1. i64.extend_i32_s ensancha con signo; la cuenta sigue en i64.
  2. i32.wrap_i64 se queda con los 32 bits bajos y suelta el resto.
  3. i64.div_u muestra que el tipo ancho trae el set completo.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
13
Caracteres a escribir
501
Tokens
104
Ritmo de tres estrellas
60 tpm

Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 104 segundos.

Escribe este fragmento

Paso 1 de 3 en Tipos más anchos; paso 23 de 28 en Fundamentos del lenguaje.

← Anterior Siguiente →