1.1 KiB
1.1 KiB
Bits, Bytes, and Integers
Integers
Representation
Conversion
Mapping Between signed and unsigned
Maintain bit pattern
so the conversion of negative value of the signed or value over the T_MAX results different interpreted value.
Expanding, Truncating
expanding of $w$-bit signed integer
X = x_{w-1}x_{w-2}\cdots x_0
where s = x_{w-1}
expanding it to $w+k$-bit signed int:
X = s_{k}s_{k-1} \cdots s_1 x_{w-1}\cdots x_0,\quad \text{where}\, s_i = s
truncation of $w$-bit signed integer
first k bit change
C Puzzle
int x = foo();
int y = bar();
unsigned ux = x;
unsigned uy = y;
x < 0->((x*2) < 0)false: underflow
ux >= 0- it's converted to
ux >= 0usotruefor all ux
- it's converted to
x & 7 == 7->(x << 30) < 0true
ux > -1always false,-1 = uint_max
x > y->-x < -yfalse
x * x >= 0false
x > 0 && y > 0->x + y > 0x >= 0->-x <= 0x <= 0->-x >= 0(x|-x) >> 31 == -1ux >> 3 == ux/8x >> 3 == x/8x & (x-1) != 0true