整数与二进制相关的tricks。
注意一点,32位整数的数量级是40亿,也就是10^9,如果数据范围是10^9级别,则需要考虑是否要用64位整数来表示。
C++支持无符号数和有符号数,重点关注有符号数的表示。
对于有符号数,最高位表示符号位,符号位为0,表示这个数是正数,否则为负数。对于负数的表示,C++使用补码来表示负数,补码等于原码除符号位外全部取反再加1。
以8位有符号数-1和-128为例,其原码,反码,补码如下:
-1:
原码 | 1000 0001 |
反码 | 1111 1110 |
补码 | 1111 1111 |
-128:
原码 | 无 |
反码 | 无 |
补码 | 1000 0000 |
一个数字从0开始不断加1,其表示的有符号数变化过程为:
C++整数相关的常量
整数相关的tricks
补码与符号位
zigzag算法
溢出问题