Files
2025-02-SystemProgramming/notes/1.md
2025-09-18 14:39:12 +09:00

61 lines
1.1 KiB
Markdown

# 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
```c
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 >= 0u` so `true` for all ux
* `x & 7 == 7` -> `(x << 30) < 0`
* `true`
* `ux > -1`
* `always false`, `-1 = uint_max`
* `x > y` -> `-x < -y`
* `false`
* `x * x >= 0`
* `false`
* `x > 0 && y > 0` -> `x + y > 0`
* `x >= 0` -> `-x <= 0`
* `x <= 0` -> `-x >= 0`
* `(x|-x) >> 31 == -1`
* `ux >> 3 == ux/8`
* `x >> 3 == x/8`
* `x & (x-1) != 0`
* `true`