java 长整型long_C语言和java 长整型为何打印不同?

本文探讨了Java和C语言中长整型数值的表示差异。在Java中,0xffffffff被视为int类型,而C语言会尝试将其作为unsigned int解析。当在C语言中使用(long)进行强制类型转换时,才会将其视为长整型。文中还提到了作者在B站提供的免费编程入门视频资源,帮助初学者理解这些基础知识。
摘要由CSDN通过智能技术生成

要素很多哈,我们先说 Java 的。

Java官方文档说了,An integer literal is of typelongif it ends with the letterLorl; otherwise it is of typeint. 换句话说,0xffffffff 的数据类型 type 只能是 int,0xffffffffL 的类型 type 只能是 long。另外 Java 的 int 和 long 都是默认 signed,都是从负数到正数的。(当然 Java 8 之后,这里有更新,某些情况下 int 和 long 也能 represent unsigned 的值,具体请看。)

如果不是 8个f,是9个f,long x = 0xfffffffff,那么 Java 会报错 The literal 0xfffffffff of type int is out of range 。间接说明了确实 0xffffffff 的类型被 Java 确定为(定死了是) int 。所以 @jinchamL 说的,我觉得是很对。我自己在 Java SE 8 的版本下,测试过了,结果也是一致的。(不清楚为啥你的结果不一样。。你的 Java/JDK 的版本是。。?)

那么为啥 C 里面的值不一样呢?

简而言之是因为 C 里面有 unsigned int,当然这里要先假设C语言的编辑器/硬件规定了 int 的大小是 4个 byte 而且 long 的大小是 8 个 byte,不然也可能输出不一样的值。所以 C语言下的 0xffffffff 先会被尝试能不能是 int 类型,不行的话尝试一下能不能是 unsigned int 类型,最终确定是 unsigned int 类型,因为 int 的范围里面没有 0xffffffff 这个数字大小(十进制的4294967295 / 2^32 - 1)。如果 unsigned int 不行的话就试试 long int 再 unsigned long int,以此类推,更多信息可以看这个 stackoverflow 的 link。

当然你写了 long x=(long)0xffffffff; 这里面的 (long) 是我上面说的都做完了,然后才会做 (long) 的 casting 。

最后的最后,我自己在B站上传的免费编程入门视频,专注于入门,由浅入深地服务零基础的同学们。里面一开始把计算机和C语言的最基础最重要的概念讲清楚 ➕ 代码示例和自己实时写代码测试。里面的所有的资料和代码都是公开在我的百度网盘里面https://www.bilibili.com/video/av65793738/​www.bilibili.com

谢谢哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值