Java 和C语言基本数据类型大小

本文深入探讨了C语言中各种基本数据类型的大小,包括整型、浮点型、字符型及其无符号版本,通过代码示例展示了不同数据类型占用内存的字节数。此外,还介绍了结构体在内存中的布局。
#include<stdio.h>
struct node
{
	char dept[20];
	int *next;
};

typedef struct{
	char docname[20];
	int no;
	int *prior;
}Node;

int main()
{
	printf("sizeof(int)%d\n",sizeof(int));
	printf("sizeof(unsigned int)%d\n",sizeof(unsigned int));
	printf("sizeof(char)%d\n",sizeof(char));
	printf("sizeof(signed char)%d\n",sizeof(signed char));
	printf("sizeof(unsigned char)%d\n",sizeof(unsigned char));
	printf("sizeof(unsigned short)%d\n",sizeof(unsigned short));
	printf("sizeof(short)%d\n",sizeof(short));
	printf("sizeof(long)%d\n",sizeof(long));
	printf("sizeof(unsigned long) %d\n",sizeof(unsigned long));
	printf("sizeof(float) %d\n",sizeof(float));
	printf("sizeof(double) %d\n",sizeof(double));
	printf("sizeof(double) %d\n",sizeof(double));
	printf("sizeof(node) %d\n",sizeof(node));
	printf("sizeof(Node) %d\n",sizeof(Node));
	return 0;
}

在这里插入图片描述

/**
 * @(#)Main.java
 *
 *
 * @author 
 * @version 1.00 2020/3/4
 */


public class Main{
    public static void main(String[] args){
        System.out.println("Integer.MIN_VALUE "+Integer.MIN_VALUE);
        System.out.println("Integer.MAX_VALUE "+Integer.MAX_VALUE);
        System.out.println("Integer.SIZE "+Integer.SIZE);
        System.out.println("Byte.SIZE "+Byte.SIZE);
        System.out.println("Short.SIZE "+Short.SIZE);
        System.out.println("Long.SIZE "+Long.SIZE);
        System.out.println("Double.SIZE "+Double.SIZE);
        System.out.println("Boolean.TYPE "+Boolean.TYPE);
        System.out.println("Character.SIZE "+Character.SIZE );
    }
}

在这里插入图片描述

### 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、付费专栏及课程。

余额充值