/*程序原理*/
/*正整数在电脑中的存储使用的二进制原码存储,而负数则是用二进制补码方式存储。补码是用原码取反再加1后获得的。例如char a = -1,由于a是char型数据类型,占一个字节,也就是八位,所以-1的原码为,10000001,最高位是符号位,负数的符号位为1。取反的结果为(符号位不变),11111110,在加1为,11111111。
因为无符号类型的整数最高位不是符号位,所以最大取值就是所有的比特位都为1,利用这个特点,可以计算出以上数据类型的正数最大取值。*/
#include <stdio.h>
int main()
{
char a = 0; //定义字符型变量
long b = 0; //定义长整型变量
int c = 0; //定义整型变量
short d = 0; //定义短整型变量
//%u为无符号类型输出格式符
printf("char a = %u\n",(unsigned char)(a - 1)); //无符号类型输出强制类型转换的结果
printf("long b = %u\n",(unsigned long)(b - 1));
printf("int c = %u\n",(unsigned int)(c - 1));
printf("short d = %u\n ",(unsigned short)(d - 1));
return 0;
}
/*结果为:
char a = 255
long b = 4294967295
int c = 4294967295
short = 65535
从结果可以看出,在我的电脑中,long型与int型数据类型占据的字节数是一样的,都为四个字节,32位;而char型占一个字节,八位;short型占两个字节,十六位。
*/