关于自己的一点好奇(int 和 long)。希望大佬们指点一下

既然 int 、 long 占用字节数一致,表示范围也一致,那为什么long还有存在的必要?有什么其他的区别吗,还是说在很久以前 long 的字节数大于 int ,现在更新后为一致了,也没人管这个了。

这个一致是在啥平台一致的?
不同的平台int 和 long的长度定义是不一样的,要看具体的平台定义。

我只在64位win10上测过,您说的不同平台定义不一样,可否说一下是什么平台吗?


对于int 和 long的定义只有一个最小长度的规定,即int可以和long一样大小。

我说的平台指系统和cpu架构,比如x86 win10 , x86_64_win7, x86 linux, mips linux, arm linux等。

1 个赞

非常谢谢您的回复,不过我好像还是没太理解您意思。 int 和 long 都是4字节,在x86_64_win10里应该都占32位(在不同平台里不应该也是相同的吗),此时他们的取值范围应该也一致,这样来看是不是 long 和 int 就是有种重复存在的感觉了。

1 个赞

历史原因,你不能只看现在。就好像现在吃饱了,就怀疑之前闹革命的必要性一样。

一个是整型,一个是长整型,完全不一样。long 在64位机器下是64位宽,这时要是long存进int就要溢出了。
int long全设置为32位是微软为了兼容32位代码采用的 LLP64 模型导致的

1 个赞

他说的就是不一定一致。在x86上一致不代表别的平台上一致。

一般用int,long long,不太可能用到long,不用管它。


这种问题最合适了

1 个赞

實際上還真有不一樣的平臺,這些東西看看標準文檔就知道了。

对啊,我也只是想弄明白一下自己的疑惑,不存在质疑这些意思哈。

1 个赞

哈哈,好的好的,大致知道是个啥情况了,感谢!

c和cpp没法做到不同平台一致,之后java以后的语言基本做到了.

是的,一些程序要分32位和64位正因如此。

这个跟系统的32 64没有什么关系,c、cpp的int变量在不同的32位系统照样有区别,而java golang 的的程序跑32还是64为变量长度都是一致的,只是因为c、cpp只是一个语言标准,并没有强制规范不同平台的实现细节.

我看不是system的不同,而是Compiler。

也相当于系统了,除了Linux的gcc之外一般c的编译器都是系统提供的,也就相当于每个系统有自己的c标准.