在C/C++中,char类型和int类型是等价的,只是char类型固定8bit,而int则根据机器位数不同分为16bit和32bit。
先讨论比较简单的char类型,
unsigned char,无符号字符型,也就是说八位全部用来表示数值
所以其取值范围为00000000-11111111也就是0-2^8-1 0-255
char ,一般默认是signed char,但不同的编译器可能处理的不一样,这里我们默认是按signed char来讨论,也就是最高位为符号位
所以真正有效的数值位只有7位
1 1111111-0 1111111
把红色部分的符号位转化为+ -后就很好理解了
- 2^7-1 ~ +2^7-1 ----> -128~127
对于int 和long 的讨论过程完全一样,
int 32位的情况
unsigned int 0 ~ 2^32-1
signed int -2^31-1 ~ +2^31-1
就不再赘述了,之所以写这篇,因为笔者再面试的时候被问到了,虽然是个小问题,如果不理解原理,关键时候是会犯糊涂的。