如何在C中使用Long数据类型?
我对 C 中的 long 的工作方式有点困惑。
如果我询问 Java 中 long 的最大值,我会得到一个数以十亿计的数字。如果我用 C 语言请求它,无论有没有签名,都会有数十亿。
Java 是建立在 C 基础之上的……那么差异从何而来呢?
我还尝试过使用 long long 值、无符号/有符号 long 值和 long int 值来表示文字。他们似乎都没有处理超过数十亿的数字。为什么?我犯错了吗?
I'm a little confused as to how longs work in C.
If I ask for the maximum value of a long in Java I get a number in the quintillions. If I ask for it in C, signed or unsigned, it's in the billions.
Java is built on C... so where is the difference coming from?
I've also tried representing literals with long long values, unsigned/signed long values and long int values. None of them seem to handle numbers past the mid-billions. Why? Am I making a mistake?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
C 标准定义
long
至少与int
一样大。实际大小取决于实现。 Java 的情况并非如此,Java 中long
要求长度为 64 位。C99 标准定义了固定大小的整数类型,例如
stdint.h
中定义的int64_t
,如果您需要在所有平台上使用固定大小的整数,则可以使用它们。The C standard defines
long
to be at least as large asint
. The actual size is implementation dependent. This is not the case for Java, in whichlong
is required to be 64 bits long.The C99 standard defines fixed size integer types like
int64_t
defined instdint.h
that you can use if you need fixed size integers on all platforms.C 也有
long long
类型。该版本保证至少为 64 位。C also has the
long long
type. That one is guaranteed to be at least 64 bit.如果您想使用更大的数字,您可以在此处使用 GNU MP Bignum 库:
http://gmplib.org/
数量和精度仅受其运行的机器的可用内存的限制。
If you want to work with bigger numbers you can use the GNU MP Bignum Library here:
http://gmplib.org/
The numbers and the precision is only limited by available memory of the machine that it runs on.