silk/i8
Eight-bit signed integers for compact values, byte-level formats, and narrow arithmetic.
When to use
Use i8 when an external format or data structure requires exactly eight signed bits. Prefer a
wider integer for general arithmetic: the small range makes accidental overflow easy.
Details
Ordinary arithmetic, narrowing conversions, division by zero, and invalid shift counts trap.
Choose checked* when failure is data, wrapping* for arithmetic modulo 2^8, or saturating*
when results should clamp to MIN or MAX. Signed right shifts preserve the sign bit.
Decimal parse consumes the complete input and distinguishes malformed text from a value
outside the i8 range. toText allocates an owned decimal string.
Gotchas
MIN has no positive i8 counterpart, so ordinary negate traps for that one value.
Examples
Select the boundary policy for negation
import silk.i8 as i8
pub fn main() -> i32 {
if i8.wrappingNegate(i8.MIN) != i8.MIN {
return 1
}
if i8.saturatingNegate(i8.MIN) != i8.MAX {
return 2
}
return 42
}Import as i8 with import silk.i8.
Public declarations: 60.
MAX
pub const MAX: i8The largest i8 value.
MIN
pub const MIN: i8The smallest i8 value.
BITS
pub const BITS: u32The fixed width of i8, in bits.
negate
pub fn negate(value: i8) -> i8Returns the arithmetic negation of value and traps when value is MIN. Use
this function when that boundary is a program error.
wrappingNegate
pub fn wrappingNegate(value: i8) -> i8Returns the arithmetic negation of value, wrapped to the i8 range. MIN
stays MIN. Use this function for deliberate modulo arithmetic.
saturatingNegate
pub fn saturatingNegate(value: i8) -> i8Returns the arithmetic negation of value, clamped to the i8 range. MIN
becomes MAX. Use this function when the positive boundary is required.
toU8
pub fn toU8(value: i8) -> u8Converts value to u8. Traps if value is outside the u8 range. Use
this function when an out-of-range value is a program error.
checkedToU8
pub fn checkedToU8(value: i8) -> Option<u8>Converts value to u8, or returns None if value is outside the u8
range. Use this function when an out-of-range value is input data.
toU16
pub fn toU16(value: i8) -> u16Converts value to u16. Traps if value is outside the u16 range. Use
this function when an out-of-range value is a program error.
checkedToU16
pub fn checkedToU16(value: i8) -> Option<u16>Converts value to u16, or returns None if value is outside the u16
range. Use this function when an out-of-range value is input data.
toU32
pub fn toU32(value: i8) -> u32Converts value to u32. Traps if value is outside the u32 range. Use
this function when an out-of-range value is a program error.
checkedToU32
pub fn checkedToU32(value: i8) -> Option<u32>Converts value to u32, or returns None if value is outside the u32
range. Use this function when an out-of-range value is input data.
toU64
pub fn toU64(value: i8) -> u64Converts value to u64. Traps if value is outside the u64 range. Use
this function when an out-of-range value is a program error.
checkedToU64
pub fn checkedToU64(value: i8) -> Option<u64>Converts value to u64, or returns None if value is outside the u64
range. Use this function when an out-of-range value is input data.
toUsize
pub fn toUsize(value: i8) -> usizeConverts value to usize. Traps if value is outside the usize range. Use
this function when an out-of-range value is a program error.
checkedToUsize
pub fn checkedToUsize(value: i8) -> Option<usize>Converts value to usize, or returns None if value is outside the usize
range. Use this function when an out-of-range value is input data.
toI8
pub fn toI8(value: i8) -> i8Returns value unchanged as i8. Use this function when generic conversion code
can select i8 as both source and destination.
checkedToI8
pub fn checkedToI8(value: i8) -> Option<i8>Returns Some with value unchanged as i8. Use this function when generic
checked-conversion code can select the same source and destination type.
toI16
pub fn toI16(value: i8) -> i16Converts value exactly to i16. Every i8 value is representable.
checkedToI16
pub fn checkedToI16(value: i8) -> Option<i16>Converts value exactly to i16 and returns Some. Every i8 value is
representable.
toI32
pub fn toI32(value: i8) -> i32Converts value exactly to i32. Every i8 value is representable.
checkedToI32
pub fn checkedToI32(value: i8) -> Option<i32>Converts value exactly to i32 and returns Some. Every i8 value is
representable.
toI64
pub fn toI64(value: i8) -> i64Converts value exactly to i64. Every i8 value is representable.
checkedToI64
pub fn checkedToI64(value: i8) -> Option<i64>Converts value exactly to i64 and returns Some. Every i8 value is
representable.
toIsize
pub fn toIsize(value: i8) -> isizeConverts value exactly to isize. Every i8 value is representable.
checkedToIsize
pub fn checkedToIsize(value: i8) -> Option<isize>Converts value exactly to isize and returns Some. Every i8 value is
representable.
toF32
pub fn toF32(value: i8) -> f32Converts value to the nearest f32 value, with ties to even.
toF64
pub fn toF64(value: i8) -> f64Converts value to the nearest f64 value, with ties to even.
add
pub fn add(left: i8, right: i8) -> i8Returns left + right and traps if the result is outside the i8 range. Use this function
when overflow is a program error.
subtract
pub fn subtract(left: i8, right: i8) -> i8Returns left - right and traps if the result is outside the i8 range. Use this function
when overflow is a program error.
multiply
pub fn multiply(left: i8, right: i8) -> i8Returns left * right and traps if the result is outside the i8 range. Use this function
when overflow is a program error.
divide
pub fn divide(left: i8, right: i8) -> i8Returns left / right, rounded toward zero. Traps if right is zero or MIN is
divided by -1. Use this function when an invalid quotient is a program error.
remainder
pub fn remainder(left: i8, right: i8) -> i8Returns the remainder with the sign of left. Traps if right is zero or MIN is
divided by -1. Use this function when invalid division is a program error.
bitAnd
pub fn bitAnd(left: i8, right: i8) -> i8Returns the bitwise AND of left and right.
bitOr
pub fn bitOr(left: i8, right: i8) -> i8Returns the bitwise OR of left and right.
bitXor
pub fn bitXor(left: i8, right: i8) -> i8Returns the bitwise exclusive OR of left and right.
bitNot
pub fn bitNot(value: i8) -> i8Returns value with each bit inverted.
shiftLeft
pub fn shiftLeft(left: i8, right: i8) -> i8Shifts left bits left by right positions. Traps if right is negative or not less than
BITS.
shiftRight
pub fn shiftRight(left: i8, right: i8) -> i8Shifts left bits right by right positions and preserves its sign. Traps if right is
negative or not less than BITS.
rotateLeft
pub fn rotateLeft(left: i8, right: i8) -> i8Rotates the bits of left left by right positions.
rotateRight
pub fn rotateRight(left: i8, right: i8) -> i8Rotates the bits of left right by right positions.
wrappingAdd
pub fn wrappingAdd(left: i8, right: i8) -> i8Returns left + right, wrapped to the i8 range. Use this function for
deliberate modulo arithmetic.
wrappingSubtract
pub fn wrappingSubtract(left: i8, right: i8) -> i8Returns left - right, wrapped to the i8 range. Use this function for
deliberate modulo arithmetic.
wrappingMultiply
pub fn wrappingMultiply(left: i8, right: i8) -> i8Returns left * right, wrapped to the i8 range. Use this function for
deliberate modulo arithmetic.
saturatingAdd
pub fn saturatingAdd(left: i8, right: i8) -> i8Returns left + right, clamped to MIN or MAX. Use this function when a
boundary value is the required overflow result.
saturatingSubtract
pub fn saturatingSubtract(left: i8, right: i8) -> i8Returns left - right, clamped to MIN or MAX. Use this function when a
boundary value is the required overflow result.
saturatingMultiply
pub fn saturatingMultiply(left: i8, right: i8) -> i8Returns left * right, clamped to MIN or MAX. Use this function when a
boundary value is the required overflow result.
checkedAdd
pub fn checkedAdd(left: i8, right: i8) -> Option<i8>Returns Some with left + right, or None if the result is outside the i8 range.
Use this function when overflow is input data.
checkedSubtract
pub fn checkedSubtract(left: i8, right: i8) -> Option<i8>Returns Some with left - right, or None if the result is outside the i8 range.
Use this function when overflow is input data.
checkedMultiply
pub fn checkedMultiply(left: i8, right: i8) -> Option<i8>Returns Some with left * right, or None if the result is outside the i8 range.
Use this function when overflow is input data.
checkedDivide
pub fn checkedDivide(left: i8, right: i8) -> Option<i8>Returns Some with left / right, or None if right is zero or MIN is
divided by -1. Use this function when an invalid quotient is input data.
checkedRemainder
pub fn checkedRemainder(left: i8, right: i8) -> Option<i8>Returns Some with the remainder, or None if right is zero or MIN is
divided by -1. Use this function when invalid division is input data.
equals
pub fn equals(left: i8, right: i8) -> boolReturns true when left and right are equal.
notEquals
pub fn notEquals(left: i8, right: i8) -> boolReturns true when left and right are not equal.
lessThan
pub fn lessThan(left: i8, right: i8) -> boolReturns true when left is less than right.
lessOrEqual
pub fn lessOrEqual(left: i8, right: i8) -> boolReturns true when left is less than or equal to right.
greaterThan
pub fn greaterThan(left: i8, right: i8) -> boolReturns true when left is greater than right.
greaterOrEqual
pub fn greaterOrEqual(left: i8, right: i8) -> boolReturns true when left is greater than or equal to right.
toText
pub effect fn toText(value: i8) -> String ! OutOfMemoryError ? &mut AllocatorRenders the value as base-10 text in new owned storage. Allocation uses the required
Allocator and can fail with OutOfMemoryError.
parse
pub fn parse(text: string) -> silk/result.Result<i8, silk/format.ParseError>Reads the complete text as a signed decimal i8.
Details
A failure contains silk.format.NotANumber for empty text, a leading +, a non-digit, or
trailing bytes. It contains silk.format.OutOfRange if the number is outside the i8 range.