本文的模(modulo)运算都是指 $M$ 加或减整数个 $N$ 后使结果范围在 $0$ 到 $N-1$ 之间,$N$ 只能是正整数.以下我们假设整数用 $n$ 位二进制表示.
整数之间的转换规则:
其他基本类型转换规则:
bool:0 变为 false,否则变为 true
bool 转换为其他类型:true 变为 1,false 变为 0
有符号整数类型的负数在内存中的二进制表示常采用 2 的补(2's complement).若采用 2 的补,以下几点成立
也有其他表示负数的方法,例如最左边的 bit 表示符号,剩余表示大小.
数学上,可以将无符号的整数类型及其加法构成一个 $2^n$ 元循环群(见ex. 2 ).若采用 2 的补,由于群元素可以用任何符号,有符号整数类型可以看作将无符号整数类型的后一半元素减去 $2^n$,而群运算保持不变.
1这里讨论 c++11 标准.literal 中的字母不区分大小写,0 开头表示 8 进制, 0x 开头表示 16 进制,数字后面可以加 u,以及 l 或 ll 的一个.literal 的类型会根据数值的大小而变化.
int,最大是 long long int 每一种前面都可以加 unsigned
u 必定是 unsigned
u 的十进制必定是 signed,其他进制可以是 signed 或 unsigned(首选 signed)
l 和 ll 分别规定类型至少为 long 和 long long,如果数值超出就不断升级