服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java为什么占用四个字节你知道吗

Java为什么占用四个字节你知道吗

2021-12-09 13:01你这家伙 Java教程

这篇文章主要介绍了Java为什么占四个字节,文中介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

简单了解计算机为什么要采用二进制表示信息:

因为计算机作为一种电子计算机工具,是由大量的电子器件组成的,在这些电子器件中,电路的通断,电位的高低,用两个数字符号“1”和“0”分别表示容易实现,同时二进制的运算法则也很简单,因此计算机内部通常采用二进制代码来作为内部存储,传输和处理数据,二进制数据是用0和1两个数码来表示的数,它的基数为2(逢二进一,借一当二)
其实最开始使用的并不是二进制,而是十进制,因为人们有十个手指头,手可以表示十个数字,所以十进制是比较合理的,0的概念是之后很久才诞生的,所以是0-10而不是0-9。

电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。

为什么使用二进制我们了解了,现在就直奔我们主题

二进制位分析

首先计算机只认识二进制。而一个字节是8位二进制,只用0和1来表示状态,那么我们看看一位能表示多少个状态

1 位:0 和 1 也就是2的一次方,最多表示2个状态(要么是0,要么是1)

2 位:00 和 11 也就是2的2次方,最多表示4个状态,也就是(00,01,10,11)

3 位: 000 和 111 也就是2的3次方,最多表示8个状态,也就是(000,001,010,011,100,101,110,111)

……以此类推

8位: 就可以表示2的8次方个状态 = 256个状态

9位:表示2的9次方 = 512个状态

10位:表示2的10次方 = 1024个状态

32位:表示2的32次方 = 4294967296个状态

查看底层源码我们可以看到

Java为什么占用四个字节你知道吗

而int如果转成十进制的话,那么他们的范围[-231~231 -1],也就是“-2147483648 ~ 2147483647”

计算机为了区分正负数,所以把256个状态一半给了负数,也就是“-128~127”这256个数(因为要正负,所以从8位中拿走以为来表示)

byte 占 1个字节 = 8个比特位 就可以表示2的8次方个数

short占 2个字节 = 16个比特位……

int 占 4 个字节 = 32个比特位

那么为什么int就占了4个字节呢?

在JAVA中一共有八种基本数据类型,它们分别是 byte、short、int、long、float、double、char、boolean

其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样

  • byte 占用1个字节 它的取值范围为 -128 ~ 127

内存开销:

byte a = 1; // 00000001

  • short 占用2个字节,它的取值范围为 -32768 ~ 32767

short a = 1; // 00000000 00000001

  • int占用4个字节,它的取值范围为 -2147483648 ~ 2147483647

int a = 1; // 00000000 00000000 00000000 00000001

  • long占用8个字节,它的取值范围为 -9223372036854774808 ~ 9223372036854774807

这里就不写了~

问:所有的int都是占四个字节吗?

回答:不一定是4个字节,他和操作系统有关系,int占多少个字节是由编译器决定的 以前16位系统中int是2个字节的,而现在32位的系统,int是4个字节的,其实现在基本上都是64位系统, 所谓的16位32位64位系统是由cpu决定的,由机器指令的寻址、寄存器位数决定的 os受cpu的限制,但在32位的cpu下16位的os也可以跑 很多os是向前兼容的,就是使以前的程序也能运行,如果编译器本身是16位时代做的,那么os会提供一个模拟16位的子环境供这个编译器使用 非要转牛角尖的话,int只是语言定义里面的一个关键字,只对compiler可见,complier说它是几位就是几位,和os/cpu都没关系

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/wkh18891843165/article/details/119917485

延伸 · 阅读

精彩推荐
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12