Thoughtsjump 发表于 2020-11-24 00:12:32

关于int存放最大值

一个32比特位的整型变量可以存放的最大值为32个1?不知理解对不对。正常是-1*2^31+1*2^30+1*2^29......+1*2^0-1?
理解为(1*2^30+1*2^29......+1*2^0)-1*2^31-1

为什么程序写出来等于 -2147483648 而不是2147483647?或者开始就理解错了?

#include <stdio.h>
#include <math.h>
#define N pow(2, 31)
int main()
{
        int i, j;
        int m = j - N;
        int l = m - 1;
        j = pow(2, i);
       
        for(i = 0; i < 30; i++)
        {
                j += pow(2, i);
        }
        printf("%d\n", l);
       
        return 0;
       
}

jackz007 发表于 2020-11-24 00:42:12

       32 位全一的表达是 2 ^ 0 + 2 ^ 1 + 2 ^ 2 + 2 ^ 3 + ... + 2 ^ 31
#include <stdio.h>

int main(void)
{
      unsigned int k , d , e                                    ;
      for(d = 0 , e = 1 , k = 0 ; k < 32 ; e <<= 1 , k ++) d += e ;
      printf("0x%08x\n" , d)                                    ;
      printf("%u\n" , d)                                          ;
      printf("%d\n" , d)                                          ;
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
0xffffffff
4294967295
-1

D:\00.Excise\C>
页: [1]
查看完整版本: 关于int存放最大值