有符号的int(int),表示范围是:-2147483648(-2^31) 到 2147483647 (2^31 - 1)
int ret = 1;
for(i = 0 ; i < 32; i++)
{
ret = ret * 2;
printf("%d\n",ret-1);
}
在这个for循环里,一定要打印ret-1,因为有符号的int型最大值为2^31 - 1,如果不打印ret-1值,当i循环到31时,此时输出的是2^31,超过了这个范围,这时候的结果是-2^31,不信大家可以试试

无符号的int(unsigned int),表示范围是:0 到 4294967295 (2^32 - 1)
unsigned int ret = 1;
printf("%u\n",ret - 1);

当某个数据不可能为负数时,一定要考虑用无符号类型的数据。
当某个数据不知道正负时,一定不要用无符号类型。



1字节 = 8位
二进制位是表示信息的最小的单位,字节是存储容量的基本单位,也是内存编址的单位。
通常情况下这是一定的,跟是多少位操作系统无关

操作系统位数 = CPU位数 = CPU中寄存器的位数 = CPU能够一次并行处理的数据宽度(位数)= 数据总线宽度;

32位操作系统和64位操作系统下基本数据类型的字节数如下图: