Skip to main content

I256 - Signed 256-bit Integer

The I256 type represents a signed 256-bit integer, allowing both positive and negative values. It's the signed counterpart to U256 and is essential for arithmetic operations that require negative numbers in AssemblyScript Stylus smart contracts.

Import​

import { I256, I256Factory, U256 } from "@as-stylus/as-stylus";

Overview​

I256 provides:

  • Range: -2^255 to 2^255 - 1
  • Support for negative values unlike U256
  • Basic arithmetic operations (add, subtract)
  • Comparison operations that handle negative values correctly
  • Sign detection and negation operations
  • Conversion utilities with U256

Available Operations​

Based on the interface, I256 supports these operations:

Arithmetic Operations​

  • add(other: I256): I256 - Addition
  • sub(other: I256): I256 - Subtraction

Comparison Operations​

  • greaterThan(other: I256): boolean
  • greaterThanOrEqual(other: I256): boolean
  • lessThan(other: I256): boolean
  • lessThanOrEqual(other: I256): boolean
  • equals(other: I256): boolean - Equality comparison
  • Native operators: <, >, <=, >= - For use in comparisons

Sign Operations​

  • isNegative(): boolean - Check if value is negative
  • negate(): I256 - Return the negated value
  • abs(): U256 - Return absolute value as U256

Conversion​

  • toString(): string - Convert to string representation

Factory Methods​

  • I256Factory.create(): I256 - Create new I256 instance (zero value)
  • I256Factory.fromString(value: string): I256 - Create from string
  • I256Factory.fromU256(value: U256): I256 - Create from U256

Creation and Basic Usage​

Creating I256 Values​

import { I256, I256Factory, U256Factory } from "@as-stylus/as-stylus";

// Create new I256 instance (zero)
const zero = I256Factory.create();

// Create from string
const positiveValue = I256Factory.fromString("42");
const negativeValue = I256Factory.fromString("-42");
const largeNegative = I256Factory.fromString("-1000000000000000000");

// Create from U256
const u256Value = U256Factory.fromString("100");
const fromU256 = I256Factory.fromU256(u256Value);

Basic Operations​

const a = I256Factory.fromString("100");
const b = I256Factory.fromString("-30");

// Arithmetic operations
const sum = a.add(b); // 70
const diff = a.sub(b); // 130

// Sign operations
const isNegB = b.isNegative(); // true
const negatedB = b.negate(); // 30
const absoluteB = b.abs(); // U256 with value 30

Comparison Operations​

I256 provides proper signed comparison operations:

const positive = I256Factory.fromString("10");
const negative = I256Factory.fromString("-5");
const zero = I256Factory.create();

// Comparison methods
const isLess = negative < positive; // true (using native operator)
const isLessEq = negative.lessThanOrEqual(zero); // true
const isGreater = positive > negative; // true (using native operator)
const isGreaterEq = zero.greaterThanOrEqual(negative); // true
const isEqual = positive.equals(I256Factory.fromString("10")); // true

// Sign checking
const isNeg = negative.isNegative(); // true
const isPosOrZero = !positive.isNegative(); // true for positive or zero