2.2.2 Unsigned Encoding
Both C and C++ support signed(the default) and unsigned numbers, and Java support only signed numbers.
we denote to be the entire bit vector, and devote individual bits as within the vector.
The function , for “binary to unsigned”,length w:
where represents the ith value int bit vector, 0 or 1.
We write and is a bijection – it associates an unique value to each bit vector of length ,conversely integer between 0 and has an unique binary representation as a bit vector of length .
2.2.3 Two’s-Complement Encoding
Two’s-Complement form is used for signed numbers in the computer representation.
We express the function ,for “binary to two’s complement”,length :
We write , and is also bijection.
Programs are portable across a broad range of machines and compilers. The file <limits.h> in C library defines a varity of constants delimiting the ranges of different integer data types for the particular machine the compiler is running. For example it defines the constants INT_MAX, INT_MIN, UINT_MAX describing the ranges of signed and unsigned integers. For a two’s-complement machine int which the int data type has w bits, these constants correspond to the values of , , .
The ISO standard introduces another class of integer data types in the file <stdint.h> .This file defines a set of data types with the declaration of the forms intN_t and uintN_t, specifying N-bits signed and unsigned integers, for the different value. For example, int64_t i = 5; Along with these data types are a set of macros defining maximum and minimum values for each value of N. These have names of the form INTN_MAX, INTN_MIN, UINTN_MAX.
In two’s-comlement, for a nonnegetive x, we compute a w-bit reprentation –x as .
2.2.4 Covensions Between Signed and Unsigned
In casting between signed and unsigned, the underlying bit representation stays the same.
Since and are bijection, we can define to be , and to be .
Let , We compute the different :
, as , and
Thus, , when ,, and when x<0,
The following figure illustrates this process when w = 4.
The blue line means the situation when x>=0, while the gray curve indicates the situation x<0.