int,char,double取值范围分析

先介绍计算机正负数表现机制吧:
二进制中区分正负数的方法是看二进制的最高位是0还是1,1为负数,0为正数

原码:将一个整数,转换成二进制,就是其原码。
           如单字节的5的原码为:0000 0101;-5的原码为1000 0101。

反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。
如单字节的5的反码为:0000 0101;-5的反码为1111 1010。

补码:正数的补码就是其原码;负数的反码+1就是补码。
如单字节的5的补码为:0000 0101;-5的原码为1111 1011。
数据在计算机中是以补码形式纯在的
有符号 char 正数原码为:01 11 11 11 ,正数补码为原码,01 11 11 11 转换为10进制 为 127
char 负数原码为: 11 11 11 11 ,转换10进制为 -127.,反码为1000 0000,补码为1000 0001
那么取值范围为【-127,127】。那么问题来了,为什么是教材上是【-128,127】呢?
10000000表示-128的补码,你可以理解为是一个特殊性。
所以取值范围可以这样获得:
根据等比数列公式:Sn = a1
套入2可得: 取值范围 -2的(n-1)次方到 2的(n-1)次方 -1
#include <stdio.h>
#include <math.h>
int main()
{
int n = sizeof(int);
printf(“max:%lld”,(long long)pow(2,n8-1)-1);
printf("\n");
printf(“min:%lld”,-(long long)pow(2,n
8-1));

}

猜你喜欢

转载自blog.csdn.net/wutieliu/article/details/88062090