2019年2月5日训练日记关于int字节数,long int 字节数的讨论

今天做到了个非常有意思的题目,是关于int最大最小值。用sizeof(int)查寻,返回四个字节,4个字节计算应该是4*8=32位,其中一位为符号位,且最高为不能为2所以应该减一,2^31-1=2147483648-1=2147483647同理负数也应存在-2147483647,但是当+2147483647+1此时最高为进一也能表示所以,负数最小值应该为-2147483648。
但是同样的我用sizeof(long int)去查询字节的时候竟然也是4字节,
去网上大神给出了以下结论

可用如sizeof(char),sizeof(char*)等得出
32位编译器:
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节

然而有去查编译器是否存在其他关系,是否64位操作系统可以运行32位编译器,也有 64位系统下编译器是32位的说法,后来又看到了Windows的64位,long是4byte , Linux下的64位,long是8byt,后又看到了字节数没变,变得是位数,48与416但是难道int跟long int不是一台电脑跑出来的,一个是48一个是416,感觉闹了笑话。决定字节做实验,发现

#include<iostream>
#include<cmath>
#include<iomanip>
#include<limits.h>
using namespace std;
int main()
{
    long int a,b;
    long int c;
    long long int d;
    cin>>a>>b;
    c=d=a+b;
    cout<<c<<endl<<d;
    return 0;
}

发现无论跑多大的数都是一样的,莫不是long long int跟long int 和int一样大,后来检查程序发现c=d=a+b;将a+b的值赋给d,再将d的值赋给c不一样就鬼了。
于是换程序再跑

   #include<iostream>
    #include<cmath>
    #include<iomanip>
    #include<limits.h>
    using namespace std;
    int main()
    {
        long int a,b;
        long int c;
        long long int d;
        int e;
        cin>>a>>b;
        c=a+b;
        d=a+b;
        e=a+b;
        cout<<c<<endl<<d<<endl<<e;
        return 0;
    }

跑出来cde的值都一样,又想起是不是long int 计算的结果值事long int。在换程序再跑。

#include<iostream>
#include<cmath>
#include<iomanip>
#include<limits.h>
using namespace std;
int main()
{
    long int a,b;
    long int c;
    long long int d;
    int e;
    cin>>a>>b;
    c=a+b;
    d=a+b;
    e=a+b;
    cout<<c<<endl<<d<<endl<<e;
    return 0;
}

输入2147483647 2147483647
输出-2
输入4294967294
输出-2
在尝试跑各种数字,发现大于2147483647 时c,e输出是一样的数字,其余的输出的是c,d,e都一样。
到目前从开始写这篇文章,到现在过去了快两个小时。查了部分资料,后来发现书上也给了资料说上述大神回复,跟编译器的位数有关,而网络上也分说不一,暂时以编译器mingw32是32为编译器收尾。而对于存储的位数,计算机的位数不要相信,课本不要相信,回帖也不要相信,应该用sizeof(long int)通过程序论证了sizeof的必然正确性,否定了某回帖的字节数不变位数改变的论述。
想去下一个visual studio x64版本去论证64位系统下编译器为32位的可能性。但是苦于在老家没有无线网络,只有手机热点,2.5G的大小有点吃不消,所以暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!暂且保留问题!!!

posted @ 2019-02-05 23:04  风骨散人  阅读(83)  评论(0编辑  收藏  举报