Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >为什么需要定义数据类型???

为什么需要定义数据类型???

作者头像
Noneplus
发布于 2019-09-24 08:07:02
发布于 2019-09-24 08:07:02
7270
举报
文章被收录于专栏:开发笔记开发笔记

变量和数据类型难舍难分,思考了好久,得出下面这个结论:

变量是内存中的一个存储区域。而数据类型的定义决定了这块存储区域的大小。【变量与数据类型的关系】

为什么需要定义变量存储区域的大小?

以结果为导向来分析:

Java的整数类型分为4种:byte,short,int,long。

四种的区别在于占用的存储空间不一样。

byte占用1个字节,short占用2个字节,int占用4个字节,而long占用8个字节。

什么是字节?

字节是一种存储单位的度量。1个字节等于8位。

什么是位呢?

位可以理解为计算机的最小单位:0或者是1。也就是是说1个字节是8个0和1的排列组合:

比如说:00000000,00000001,00000011,......11111111。

那么在这种情况下1个字节可以表示多大的数呢?

00000000转换为十进制依然是0,11111111转换为十进制是255。

转换工具:https://tool.lu/hexconvert/

也就是说,一个字节最大可以表示255而最小1可以表示0。

这是无符号位的情况,如果8位表示正数和负数,那么8位可以表示的范围是多大呢?

通常情况下,用第一位来表示正负【0为正,1为负】,这样算下来8位可以表示的范围是-127到+127。

历史长河中,补码登场

上述引入符号位的8位二进制数可以理解为原码。对于正数来说,原码就是补码,而对于负数来说,保留符号位,其他原码按位取反加1所得即为补码。补码的出现使得加减法只有加法,简化了计算结构,提高运算速度。

那么8位的情况下,用补码来衡量,可以表达的范围是-128--127。

为什么是-128???(按照补码计算)

10000001到11111111表示的范围是1到127,01111110到00000001表示的范围是-1到-127。

而00000000属于负数,按位取反加1的结果是10000000表示的数值是-128,但是00000000是负数。

所以8位二进制数在计算机里存储的范围是-128--127。

回到刚刚字节的问题,1字节等于8位而八位可以表示-128--127。这是byte类型的表示范围。

那如果我想用计算机计算1000加上1000,byte明显是不可用的。因为byte表示不了1000这个数值。

而short类型的存储空间为2个字节,也就是16位。对于short数据类型来说,能表示多大的数呢?

根据8位的表示范围推算:- 2的15次方到2的15次方-1=={-32768--32767}

以此类推,int为4个字节,long为8个字节,能表示的数更大。

Java通过定义变量的类型来规定变量的内存空间大小,通过阶梯式的定义,既有满足小数值运行的byte类型,也有支持大数值运算的long类型。这样不仅满足运算的最大支持(long),同时也能节省系统内存资源(byte)。

总结:数据类型的区分是一种系统资源分配优化的方案。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java基础语法总结
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Noneplus
2019/09/24
5290
Java基础语法总结
整数、浮点数在计算机中的存储
  计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。要想学习编程,就必须了解二进制,它是计算机处理数据的基础。
mukekeheart
2019/09/29
1.8K0
整数、浮点数在计算机中的存储
C语言进阶指南(4)(数据类型——整数类型详解)
int用于声明一个整数类型的变量,我们根据变量的实际应用可以使用short int,long int,long long int。
代码小豪
2024/06/06
1890
C语言进阶(七) - 数据的储存
创建一个整型类的变量时,首先在内存中为其开辟相应的空间,接着就是如何存储这个变量的值。
怠惰的未禾
2023/04/27
2.1K0
C语言进阶(七) - 数据的储存
【进收藏夹吃灰系列】——Java基础快速扫盲
本文主要包括Java入门的一些知识,包括JDK环境安装,常用语法以及面向对象编程等。
Noneplus
2020/07/16
3790
位运算符与(&)、或(|)、异或(^)、非(~)、左移(<<)、右移(>>)、右移补零(>>>)如何选择?
上一篇:消息队列 ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka 如何选择?
良月柒
2019/11/08
2.4K0
位运算符与(&)、或(|)、异或(^)、非(~)、左移(<<)、右移(>>)、右移补零(>>>)如何选择?
计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算
上节我们提到正整数相乘的结果居然出现了负数,要理解这个行为,我们需要看下整数在计算机内部的二进制表示。 十进制 要理解整数的二进制,我们先来看下熟悉的十进制。十进制是如此的熟悉,我们可能已忽略了它的含义。比如123,我们不假思索就知道它的值是多少。 但其实123表示的1*(10^2) + 2*(10^1) + 3*(10^0),(10^2表示10的二次方),它表示的是各个位置数字含义之和,每个位置的数字含义与位置有关,从右向左,第一位乘以10的0次方,即1,第二位乘以10的1次方,即10,第三位乘以10的2
swiftma
2018/01/31
1.1K0
深入Java中的位操作
在方法中是int值,int占4字节32位,所以是:“%32s” 若是byte将32改成8即可;当然对于byte你还需要加上“&0xFF”来做高位清零操作。
程序猿DD
2019/05/10
9090
深入Java中的位操作
深度剖析数据在内存中的存储
空类型: void 表示空类型(无类型) 通常应用于函数的返回类型、函数的参数、指针类型。
用户11369558
2024/11/20
590
深度剖析数据在内存中的存储
C语言中的整型数据类型(你真的了解吗)
计算机通过晶体管的开关状态来记录数据。它们通常8个编为一组,我们称之为字节。而晶体管有开关两种状态,一个字节有8个晶体管,因此一个字节可以拥有2的八次方个不同的状态。让每一种状态对应一个数值,这样一个字节可以表示256个不同数值。
鱼找水需要时间
2023/02/16
7770
C语言中的整型数据类型(你真的了解吗)
深度刨析数据在内存中的存储
提问:为什么char属于整型家族? 回答:字符存储的时候,存储的ASCII码值,是整型,所以归类的时候放在整型家族。 浮点数家族
Yui_
2024/10/16
1270
深度刨析数据在内存中的存储
数据在内存中的存储——整数
任意一个整数(当然是不能超过INT_MAX的一个数字),都是以2进制的表示方式存储的,表示方法有三种,分别为原码,反码,补码 而这三种方法都是既有符号位又有数值位的两个部分,符号位都是0来表示“正”,用1来表示“负”,最高的那位被当作是符号位,剩下来的31个bit全是数值位。 正数的三种表示形式都是相同的 而负数三种表示方式不同 原码:直接将数值按照正负数的形式,表示为二进制,就是原码 反码:将原码的符号位不改变,其余的按位取反。 补码:反码+1得到。 当然不管是正数还是负数,整数的存储存放的就是补码。 关于为什么要存放补码存贮,其实真正的原因是因为,使用补码,可以将符号位和数值域统一处理,同时加法和减法也可以统一处理,并且原码和补码的相互转换的处理过程是相同的,不需要额外的硬件电路(符号位不变,取反,+1)
薛定谔方程难
2024/01/23
2440
数据在内存中的存储——整数
Arrays.toString()和oString()区别,2进制怎样表示负数, 原码 2 反码 3. 补码,byte&oxff到底为什么 (byte) 0x97=-105:java 2进制补码
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:
zhangjiqun
2024/12/16
910
Arrays.toString()和oString()区别,2进制怎样表示负数, 原码  2 反码  3. 补码,byte&oxff到底为什么  (byte) 0x97=-105:java 2进制补码
Java中,为什么byte类型的取值范围为-128~127?
在学习Java基础语法的时候,初学者的我们可能都会有这么一个疑问为什么byte类型的取值范围为什么是[-128,127]而不是[-127,127]。01111111表示最大的数值:127,因为第一位是符号位,所以11111111应该是最小的数值:-127,不是这样才对?
全栈程序员站长
2022/07/02
1.5K0
Java中,为什么byte类型的取值范围为-128~127?
Go 数据类型篇(四):基本数据类型之间的转化
通过前面两篇教程,学院君已经介绍完了 Go 语言中的基本数据类型,分别是布尔类型、整型、浮点型、复数类型、字符串和字符类型,此外,Go 语言还支持这些基本数据类型之间的转化,不过由于 Go 是强类型语言,所以不支持动态语言那种自动转化,而是要对变量进行强制类型转化。
学院君
2023/03/03
5600
Go 数据类型篇(四):基本数据类型之间的转化
数据在内存中的存储
整数的2进制表示方法有三种,原码、反码和补码 原码、反码和补码是用于表示有符号整数的三种方式。
用户11029103
2024/03/19
1870
数据在内存中的存储
JavaSE语法
支持国产的话可以考虑阿里的dragonwell:https://cn.aliyun.com/product/dragonwell
Noneplus
2020/08/18
8120
JavaSE语法
C语言数据的表示和存储(IEEE 754标准)
C语言的数据类型大体上分为整数和浮点数两种类型。因为char和指针类型实际上都是整数类型。
zy010101
2019/05/25
1.7K0
【C语言】数据的存储
(1)首先只要是整数,在内存中储存的都是二进制的补码,下面说一下一个十进制的数如何转化为二进制的数;
YoungMLet
2024/03/01
1430
【C语言】数据的存储
数据在内存中的存储(c语言)
数据的类型分为整型,浮点型,构造型,指针,和空类型。这些类型决定类型使用时开辟空间的大小和看待这一内存空间的视角 1 整形类型
薄荷冰
2024/01/22
1920
数据在内存中的存储(c语言)
推荐阅读
相关推荐
Java基础语法总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文