silk/u8
Eight-bit unsigned integers for bytes, compact counters, and exact binary representations.
When to use
Use u8 for an individual byte or a field specified as eight unsigned bits. Prefer a wider
integer for general counting unless the 0 through 255 range is intentional.
Details
Ordinary arithmetic, narrowing conversions, division by zero, and invalid shift counts trap.
checked* returns Option for invalid arithmetic, wrapping* computes modulo 2^8, and
saturating* clamps at MIN or MAX. Right shift inserts zero bits.
Decimal parse accepts only a complete unsigned representation; a leading minus sign is
malformed rather than an out-of-range unsigned value. toText allocates owned text.
Examples
Choose an overflow policy instead of relying on a trap
import silk.option as Option
import silk.u8 as u8
pub fn main() -> i32 {
let checked = u8.checkedAdd(255, 1)
let recovered = move checked
|> Option.unwrapOr<u8>(42)
if recovered != 42 {
return 1
}
if u8.wrappingAdd(255, 1) != 0 {
return 2
}
if u8.saturatingAdd(255, 1) != 255 {
return 3
}
return 42
}See also
Use the silk.char module when a value is a Unicode scalar rather than an arbitrary byte.
Import as u8 with import silk.u8.
Public declarations: 57.
MAX
pub const MAX: u8The largest u8 value.
MIN
pub const MIN: u8The smallest u8 value.
BITS
pub const BITS: u32The fixed width of u8, in bits.
toU8
pub fn toU8(value: u8) -> u8Returns value unchanged as u8. Use this function when generic conversion code
can select u8 as both source and destination.
checkedToU8
pub fn checkedToU8(value: u8) -> Option<u8>Returns Some with value unchanged as u8. Use this function when generic
checked-conversion code can select the same source and destination type.
toU16
pub fn toU16(value: u8) -> u16Converts value exactly to u16. Every u8 value is representable.
checkedToU16
pub fn checkedToU16(value: u8) -> Option<u16>Converts value exactly to u16 and returns Some. Every u8 value is
representable.
toU32
pub fn toU32(value: u8) -> u32Converts value exactly to u32. Every u8 value is representable.
checkedToU32
pub fn checkedToU32(value: u8) -> Option<u32>Converts value exactly to u32 and returns Some. Every u8 value is
representable.
toU64
pub fn toU64(value: u8) -> u64Converts value exactly to u64. Every u8 value is representable.
checkedToU64
pub fn checkedToU64(value: u8) -> Option<u64>Converts value exactly to u64 and returns Some. Every u8 value is
representable.
toUsize
pub fn toUsize(value: u8) -> usizeConverts value exactly to usize. Every u8 value is representable.
checkedToUsize
pub fn checkedToUsize(value: u8) -> Option<usize>Converts value exactly to usize and returns Some. Every u8 value is
representable.
toI8
pub fn toI8(value: u8) -> i8Converts value to i8. Traps if value is outside the i8 range. Use
this function when an out-of-range value is a program error.
checkedToI8
pub fn checkedToI8(value: u8) -> Option<i8>Converts value to i8, or returns None if value is outside the i8
range. Use this function when an out-of-range value is input data.
toI16
pub fn toI16(value: u8) -> i16Converts value exactly to i16. Every u8 value is representable.
checkedToI16
pub fn checkedToI16(value: u8) -> Option<i16>Converts value exactly to i16 and returns Some. Every u8 value is
representable.
toI32
pub fn toI32(value: u8) -> i32Converts value exactly to i32. Every u8 value is representable.
checkedToI32
pub fn checkedToI32(value: u8) -> Option<i32>Converts value exactly to i32 and returns Some. Every u8 value is
representable.
toI64
pub fn toI64(value: u8) -> i64Converts value exactly to i64. Every u8 value is representable.
checkedToI64
pub fn checkedToI64(value: u8) -> Option<i64>Converts value exactly to i64 and returns Some. Every u8 value is
representable.
toIsize
pub fn toIsize(value: u8) -> isizeConverts value exactly to isize. Every u8 value is representable.
checkedToIsize
pub fn checkedToIsize(value: u8) -> Option<isize>Converts value exactly to isize and returns Some. Every u8 value is
representable.
toF32
pub fn toF32(value: u8) -> f32Converts value to the nearest f32 value, with ties to even.
toF64
pub fn toF64(value: u8) -> f64Converts value to the nearest f64 value, with ties to even.
add
pub fn add(left: u8, right: u8) -> u8Returns left + right and traps if the result is outside the u8 range. Use this function
when overflow is a program error.
subtract
pub fn subtract(left: u8, right: u8) -> u8Returns left - right and traps if the result is outside the u8 range. Use this function
when overflow is a program error.
multiply
pub fn multiply(left: u8, right: u8) -> u8Returns left * right and traps if the result is outside the u8 range. Use this function
when overflow is a program error.
divide
pub fn divide(left: u8, right: u8) -> u8Returns left / right. Traps if right is zero. Use this function when a zero
divisor is a program error.
remainder
pub fn remainder(left: u8, right: u8) -> u8Returns the remainder of left / right. Traps if right is zero. Use this function
when a zero divisor is a program error.
bitAnd
pub fn bitAnd(left: u8, right: u8) -> u8Returns the bitwise AND of left and right.
bitOr
pub fn bitOr(left: u8, right: u8) -> u8Returns the bitwise OR of left and right.
bitXor
pub fn bitXor(left: u8, right: u8) -> u8Returns the bitwise exclusive OR of left and right.
bitNot
pub fn bitNot(value: u8) -> u8Returns value with each bit inverted.
shiftLeft
pub fn shiftLeft(left: u8, right: u8) -> u8Shifts left bits left by right positions. Traps if right is not less than BITS.
shiftRight
pub fn shiftRight(left: u8, right: u8) -> u8Shifts left bits right by right positions and inserts zero bits. Traps if right is
not less than BITS.
rotateLeft
pub fn rotateLeft(left: u8, right: u8) -> u8Rotates the bits of left left by right positions.
rotateRight
pub fn rotateRight(left: u8, right: u8) -> u8Rotates the bits of left right by right positions.
wrappingAdd
pub fn wrappingAdd(left: u8, right: u8) -> u8Returns left + right, wrapped to the u8 range. Use this function for
deliberate modulo arithmetic.
wrappingSubtract
pub fn wrappingSubtract(left: u8, right: u8) -> u8Returns left - right, wrapped to the u8 range. Use this function for
deliberate modulo arithmetic.
wrappingMultiply
pub fn wrappingMultiply(left: u8, right: u8) -> u8Returns left * right, wrapped to the u8 range. Use this function for
deliberate modulo arithmetic.
saturatingAdd
pub fn saturatingAdd(left: u8, right: u8) -> u8Returns left + right, clamped to MIN or MAX. Use this function when a
boundary value is the required overflow result.
saturatingSubtract
pub fn saturatingSubtract(left: u8, right: u8) -> u8Returns left - right, clamped to MIN or MAX. Use this function when a
boundary value is the required overflow result.
saturatingMultiply
pub fn saturatingMultiply(left: u8, right: u8) -> u8Returns left * right, clamped to MIN or MAX. Use this function when a
boundary value is the required overflow result.
checkedAdd
pub fn checkedAdd(left: u8, right: u8) -> Option<u8>Returns Some with left + right, or None if the result is outside the u8 range.
Use this function when overflow is input data.
checkedSubtract
pub fn checkedSubtract(left: u8, right: u8) -> Option<u8>Returns Some with left - right, or None if the result is outside the u8 range.
Use this function when overflow is input data.
checkedMultiply
pub fn checkedMultiply(left: u8, right: u8) -> Option<u8>Returns Some with left * right, or None if the result is outside the u8 range.
Use this function when overflow is input data.
checkedDivide
pub fn checkedDivide(left: u8, right: u8) -> Option<u8>Returns Some with left / right, or None if right is zero. Use this
function when a zero divisor is input data.
checkedRemainder
pub fn checkedRemainder(left: u8, right: u8) -> Option<u8>Returns Some with the remainder, or None if right is zero. Use this function
when a zero divisor is input data.
equals
pub fn equals(left: u8, right: u8) -> boolReturns true when left and right are equal.
notEquals
pub fn notEquals(left: u8, right: u8) -> boolReturns true when left and right are not equal.
lessThan
pub fn lessThan(left: u8, right: u8) -> boolReturns true when left is less than right.
lessOrEqual
pub fn lessOrEqual(left: u8, right: u8) -> boolReturns true when left is less than or equal to right.
greaterThan
pub fn greaterThan(left: u8, right: u8) -> boolReturns true when left is greater than right.
greaterOrEqual
pub fn greaterOrEqual(left: u8, right: u8) -> boolReturns true when left is greater than or equal to right.
toText
pub effect fn toText(value: u8) -> 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<u8, silk/format.ParseError>Reads the complete text as an unsigned decimal u8.
Details
A failure contains silk.format.NotANumber for empty text, a sign, a non-digit, or trailing
bytes. It contains silk.format.OutOfRange if the number is outside the u8 range.