关于java语言和c语言中基本数据类型的长度

本文详细介绍了Java和C/C++中基本数据类型的字节数,包括byte、short、char、int、long、float、double等,并讨论了不同类型在不同编译器下的变化情况。

以前只知道用基本数据类型,对数据长度倒从来没有关心过,也没什么概念!今天由于工作需要,在网上查找到以下内容,做个笔记记录一下,顺便与大家分享一下!如有问题,请及时讨论修改,谢谢

java基本数据类型所占字节数

byte  1个字节
short 2个字节
char  2个字节
int   4个字节
long  8个字节
float 4个字节
double 8个字节
C/C++基本数据类型所占字节数

关于这个基本的问题,很早以前就很清楚了,C标准中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器、OS、编译器有关,比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节;而tuborC下则是2个字节。


所以int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):


  • sizeof(short int)<=sizeof(int)

  • sizeof(int)<=sizeof(long int)

  • short int至少应为16位(2字节)

  • long int至少应为32位。


下面给出不同位数编译器下的基本数据类型所占的字节数:



16位编译器


char :1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int:  2个字节
unsigned int : 2个字节
float:  4个字节
double:   8个字节
long:   4个字节
long long:  8个字节
unsigned long:  4个字节



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个字节

### Java与C语言基本数据类型对比及区别 #### 数据类型的分类 在 C Java 中,都存在 **基本数据类型** **引用数据类型** 的概念。然而,在具体实现上两者有着显著的区别。 - 在 C 语言中,主要的基本数据类型包括 `char`, `short`, `int`, `long`, `long long`, `float` `double` 等[^1]。 - 而在 Java 中,基本数据类型则被定义为更严格的范围精度控制,主要包括以下八种:`byte`, `short`, `int`, `long`, `float`, `double`, `boolean`, `char`[^4]。 --- #### 字节占用的不同 C 语言允许不同的平台决定每种数据类型大小,因此其字节占用可能因编译器或操作系统而异。例如: | 类型 | 常见字节占用 (C) | |--------------|------------------| | char | 1 byte | | short | 2 bytes | | int | 4 bytes 或更多 | | float | 4 bytes | 而在 Java 中,为了跨平台的一致性,所有基本数据类型大小都被严格规定,不受运行环境的影响[^3]: | 类型 | 字节占用 (Java) | |--------------|-----------------| | byte | 1 byte | | short | 2 bytes | | int | 4 bytes | | long | 8 bytes | | float | 4 bytes | | double | 8 bytes | | boolean | 不固定(逻辑值) | | char | 2 bytes (UTF-16)| --- #### 符号处理的差异 C 语言支持无符号 (`unsigned`) 整数类型,比如 `unsigned int`、`unsigned short` `unsigned long`,这些类型用于表示非负整数值。但在 Java 中,并不存在类似的无符号整数类型。所有的整数类型默认是有符号的,即最高位作为符号位使用。 如果需要模拟无符号行为,则可以通过强制转换或者利用更高位宽的数据类型来完成计算。 --- #### 特殊类型的支持 - **布尔类型**: C 语言并没有专门的布尔类型(`bool`),通常通过宏定义或其他方式间接表达真伪状态;相比之下,Java 提供了一个独立的关键字 `boolean` 来代表逻辑真假值。 - **字符编码**: C 使用单字节 ASCII 编码存储字符变量(char),而 Java 默认采用双字节 UTF-16 编码方案保存每一个字符,这使得它能够更好地兼容国际化需求。 --- #### 数组与其他复杂结构体 除了简单原始数据单元之外,两种语言还提供了构建更为复杂的内存布局机制——数组。不过需要注意的是,在 C 当中可以直接操作指针指向任意地址空间创建动态长度序列对象;但是由于安全性考量因素影响下,JVM 上面执行程序不允许如此自由灵活地访问底层硬件资源,所以必须借助特定 API 方法才能达到类似效果[^2]。 ```java // Java Array Example int[] numbers = new int[]{1, 2, 3}; System.out.println(numbers.length); // Output the size of array. ``` --- #### 总结 综上所述,尽管 Java 继承了许多来自 C 的设计理念,但它针对现代软件开发场景做了大量改进优化工作,特别是在简化语法结构的同时增强了可移植性健壮程度等方面表现尤为突出。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值