浅谈JAVA中的基本变量 浅谈java中的基本变量操作
lipiwang 2024-10-20 10:13 9 浏览 0 评论
作为一门面向对象编程的语言,JAVA也不例外,拥有大多数编程语言都具有的变量类型:值类型,一般情况下,将JAVA中的值类型称为基本类型,其它的类型则为引用类型。本次讨论研究的就是基本类型。
学过C语言的朋友们都知道,在C语言中包含的数据类型有short、int、long、char、float、double,JAVA作为C语言的“升级版”,同时增加了byte和boolean,严格来说C语言中是没有boolean类型的,在进行条件判断的时候,一般将非0的值作为true,0作为false。JAVA中单独定义了一种变量类型用于条件判断,且无法像C语言那样直接将数字作为boolean作为判断条件,请看以下代码:
int flag = 1;
//C语言版本:可将非0值看作true,0看作false
if (flag) {
printf_s("Hello World");
}
//JAVA版本:编译时会将 flag != 0 编译为boolean类型
if (flag != 0) {
System.out.println("Hello World");
}
//编译的class文件(部分),供参考
public static void main(String[] var0) {
boolean var1 = true;
boolean var2 = false;
if (var1) {
System.out.println("Hello World");
}
}
上面简单的对JAVA的boolean类型作了一个小扩展,这里开始讲解JAVA的八大基本类型,下表就表示了JAVA中的基本数据类型以及它们的取值范围。
这时候就有小伙伴问啦,为什么整数要用四个数据类型来分开表示,且它们的取值范围是如何来的呢?
为什么整数要用四个数据类型来分开表示整型呢?
那是因为最早的个人计算机内存实在太小了,1976年苹果发布的的Apple II也只有4KB内存。所以要想设计一个好的程序,必须竭尽所能地节省内存。而上面四种数据类型正是对应不同的存储大小。一个int类型能储存接近22亿大的数字,它占4字节,在那时候你却用它来储存人的年龄,那项目经理就会对你投以“和善”的目光。又或者你要用int类型来储存马云的钱(不考虑小数),马云听了想打人[笑哭][笑哭][笑哭]。
它们的取值范围是如何来的呢?
计算机中规定:一个二进制数为1Bit,8比特为一个字节(Byte),字节(Byte)也是电脑中表示信息含义的最小单位。也就是说你在计算机中哪怕存了一个0,也要用8bit来表示0000_0000,那么使用1字节最多能表示2^8-1个二进制数字也就是0~255个。那么负数呢?正好正负也是两种状态,同样完美契合二进制,所以就规定,最高位(第一位)用来代表正负,0为正、1为负。那么能用来表示有效数的bit就只有7位了,只能表示2^7-1个数,也就是0~127。算上最高位的符号位,1字节能表示的有效数就是-127~127。
上面的结论看上去好像没什么毛病,但小伙伴们请思考一个问题0000_0000、1000_0000,这两个分别代表什么呢?+0和-0?小学知识就告诉我们0是不分正负的。所以为了不浪费的精神,人们规定在Byte里面1000_0000代表-128。那么1个字节最终能表示的有效数为-128~127,这也是小伙伴们在学习一门编程语言时整型的有效范围为什么负数总比正数多一个。以JAVA为例,规定short占两个字节,也就是一个short数据类型用16个二进制来表示,那么它能表示的最大范围就是2^{15}-1(去掉最高位的符号位),算上符号有效范围就-32768~32767,int占4个字节,long占8个字节,小伙伴们可以动手算一算它们能表示的有效数范围。它叫计算机,又能表示数,那么就要发挥它的计算功能。二进制的计算和十进制原理一样,只是在计算中逢2进1,如下:
#比如1+1
0000 0001
+0000 0001
=0000 0010
低进制向高进制转换的公式为:以上面2进制0000 0010为例:最高位符号位不计入
一切要是都这么美好该多好,请看一个例子:正一加上负一
0000 0001
+1000 0001
=1000 0010
通过上面的公式代入一计算,我滴的乖乖,等于-2。如何解决呢?这个世界总不缺聪明的人,这时候就有人提出了补码和反码的概念:而计算机没有真正意义上的减法,所以其实在计算机中,为了方便计算,数字都是以补码的形式储存。
正数:正码、反码、补码均为其本身。
负数:正码不变。反码符号位不变量,其它位取反。补码在反码的基础上加一。
那么来换算一下-1的反码
1000 0001 #-1的原码
1111 1110 #反码
1111 1111 #补码
#补码代入运算 1 + -1
0000 0001
+ 1111 1111
=10000 0000 #只有8位有效数字,所有最高位的1在参与运算后舍弃
0000 0000 #舍弃后最终结果
至于它们在内存中是如何储存的,我觉得Excel是一个非常好的示范,我们把一个格子当作一个储存单位,它只能储存一个0或1,那么要储存 0和1 这两个数字,在内存是如何储存的呢(以Byte为例)
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
因为规定了8bit为一个有效储存单位,而在声明变量的时候声明的byte类型,占1字节也就是8比特,那么每8位为一个有效数字,计算机就依次读取8bit然后进行转换,就得到了0和1。如果这时咱们规定每四位为一个有效数字,那么上面的表格就能表示四个十进制有效数字,分别为:0 0 0 1。其余的数据类型依此类推。
到此为止,小伙伴们应该就知道为什么要出现四种不同的表示整型的数据类型了吧,以及计算机是如何进行计算的,待下期咱们来谈一下比较复杂的浮点数以及更多内存相关概念。
相关推荐
- 前端入门——css 网格轨道详细介绍
-
上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...
- Islands Architecture(孤岛架构)在携程新版首页的实践
-
一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...
- HTML中script标签中的那些属性
-
HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...
- CSS 中各种居中你真的玩明白了么
-
页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...
- CSS样式更改——列表、表格和轮廓
-
上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...
- 一文吃透 CSS Flex 布局
-
原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...
- css实现多行文本的展开收起
-
背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...
- css 垂直居中的几种实现方式
-
前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...
- WordPress固定链接设置
-
WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...
- 面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿
-
前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...
- 3种CSS清除浮动的方法
-
今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...
- 2025 年 CSS 终于要支持强大的自定义函数了?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...
- css3属性(transform)的一个css3动画小应用
-
闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...
- CSS基础知识(七)CSS背景
-
一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...
- CSS 水平居中方式二
-
<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)