前言:
而今姐妹们对“二进制10010011转化为十进制”大约比较注意,兄弟们都需要知道一些“二进制10010011转化为十进制”的相关知识。那么小编同时在网上搜集了一些关于“二进制10010011转化为十进制””的相关文章,希望大家能喜欢,姐妹们快快来学习一下吧!1. java 程序的5大部分
诸小亮:“师弟,接下来我们就要聊一聊 Java 程序的构成了”
张小飞:“好啊,终于开始正题了”
“一个完整的 Java 程序由很多部分共同组成,比如:关键字、标识符、注释、常量、变量。。。”
“停停停,师兄,您的意思是,之前的程序里有这么多东西?但是看着没你说的这么复杂啊”
“之前的只是入门程序,里面包含的东西并不全,只包含的有关键字、标识符这两项”
“原来是这样”
1. Java内置的——关键字
诸小亮:“咱们首先看——关键字”
关键字:Java 定义的,一些有特殊含义的单词(都是小写)
下图中,高亮的就是关键字
“师兄,不是用 IDEA 吗,怎么又用上记事本了”
“这可不是记事本,而是 Notepad++,是一个文本编辑器,刚才的 IDEA 只是让你熟悉一下,前期我们以Notepad++ 为主来编写程序,让你练一练手速 ”
“那刚才还安装 idea 干嘛?”张小飞不满的说到
“熟悉一下嘛,idea后面会用的,另外,在命令行中执行程序是非常重要的,会让你有很大的收获,这是每个人都应该体验的一个过程,一定要相信我”诸小亮郑重的说到
“明白”张小飞看到师兄的表情,也不由的重视起来
“不过,关键字只有上面的 4 个吗?”
“不是的,关键字有很多,不过我们现在不会一个个的介绍,之后写程序的时候遇到一个说一个”
“。。。。,好吧”
2. 自己定义的——标识符
诸小亮:“接下来,我们学习——标识符”
标识符:是自己在程序中自定义的名称
下图红框中的都是:
张小飞:“我总结一下:java定义的叫关键字,我们自己定义的叫标识符,是这个意思吧”
“没错,不过标识符不能随便定义,要遵守一些规则:”
● 标识符只能由 a-z,0-9, _ 和 $ 组成,还需注意: ○ 数字不可以开头 ○ 不能使用关键字 ○ 在起名字的时,为了提高阅读性,要尽量有意义
“师兄,能不能列举几个例子”
“当然可以,看看这几个:”
合法标识符: age、name、$address、 _xiaofei 非法标识符: 123abc、+salary、 #abc特别注意:aa、bb、cc 这样的标识符虽然合法,但是阅读性极差,在工作中是禁止使用的
“好的,我大概明白了”
3. 容易理解的——注释
张小飞:“注释是什么意思?”
诸小亮:“Java 是外国人开发的,代码一般都是英文,相对来说不容易理解”
注释:可以让我们用一些文字对程序进行说明,提高代码的阅读性
比如:
“哦,原来如此,确实容易理解多了,不过,注释都是以 ‘//’ 开头吗?”
“在 Java 中的注释有 3 种:单行注释、多行注释、文档注释”
单行注释:以“//”开头多行注释:以 "/*" 开头 ,"*/" 结尾,比如:
文档注释:"/**"开头,"*/"结尾(一般用不上,了解一下就行)
张小飞:“那,每句代码都要写注释吗?”
诸小亮:“这倒不用,给你一个建议:写代码前,先写注释,把自己的思路用文字先写下来”
“这我明白,就像写作文前,先写大纲一样,对吧”
“是这个道理,你理解的还挺快”诸小亮夸赞道
4. 了解一下的——常量
诸小亮:“来,我们接着聊常量”
常量:固定值,不能改变,比如:12345678,这些数字在现实中都是固定的,8就是8,无法改变
张小飞:“怎么就无法改变呢?看我一刀下去,不就成俩 0 了?”
“那以后就能用这俩 0 来代替 8 这个数字了吗?”诸小亮微笑的问道
“这个,嗯。。。。。”
“你这一刀只是把这张纸分成了两份,但是数字 8 仍然是 8 ,所以说它是常量”诸小亮解释道
“那,按照您在这么说,3.14 也是常量了?”张小飞问道
“是的,Java中的常量分为以下几种:”
整数常量
所有整数
小数常量
所有小数
布尔(boolean)型常量
只有两个数值:true、false,相当于我们中文:对、错
字符常量
将一个数字、字母、符号,用单引号(' ')括起来
比如:'1'、'a'、'冯'、'$'
字符串常量
将一个、多个字符用双引号("")括起来
比如:"a"、"冯先生"、"fengxiansheng"、"12345678"
特殊的字符串:"",表示空字符串
null常量
只有一个值 null,表示空,什么都没有的意思
“小飞啊,这些都能看懂吧”
“可以看懂,就是不知道怎么用”
“放心,之后的代码中会经常用到,目前只是了解一下”
5. 非常重要的——变量1. 总述
诸小亮:“师弟,下面要介绍变量了,这是非常重要的,一定要仔细听”
张小飞:“师兄放心”
“变量:顾名思义,就是可以改变的值,比如:在数学中定义 x=3,y=4,z=x+y (xyz都是变量)”
再 Java 中定义变量,格式:数据类型 变量名 = 变量值;(注意:末尾有分号)
“师兄,这个数据类型是????”
“就是字面上的意思,比如:3是整数类型,3.14是小数类型(也叫浮点数类型)”
“原来如此,明白”
“Java中定义了 8 种基本数据类型,比如:”
良久,“师兄,我有 3 个问题,第一:byte、short、int、long都是整数类型,为什么有4种?”
诸小亮:“之所以分成4个类型,是因为每个类型占用的内存空间不同,来先给你普及一下基础知识:”
计算机中的单位换算: 1 B/byte(字节) = 8 bit(比特)(位) 1 KB(千字节) = 1024 B/byte(字节) 1 MB = 1024 KB 1 GB = 1024 MB 1 TB = 1024 GB 1 PB = 1024 TB 1 EB = 1024 PB
“编写代码时会设置大量的变量,在程序运行时每个变量都会占用一定的内存,但是内存是比较珍贵的资源,如果用较小的空间就能够达到目的最好,比如:如果只做 100 以内的计算,那么使用 byte 类型就好”
“原来如此,第二个问题:浮点数 和 布尔类型我能理解,不过这个字符,为什么取值也是数字呢”
“这个,之后的写代码时会给你详细解释的”
“好吧,那么第三:这些类型该如何使用呢?”
“这就是我们接下来要做的事情了”
2. 整数类型
“小飞啊,整数是我们工作中做常用的,所以一定要好好听,来,我们修改这个 Demo.java 文件”
注意:我们定义 byte b = 3; 这个 b 就是标识符
“师兄,您刚才还不是说不能用 aa、bb这样的标识符吗?现在。。。。。”张小飞无语到
“这个......嗯.....,其实这个 b 是 byte 的意思,师弟,这不是工作,不用这么严格”
“好吧。。。。。”
“接着,我们在命令行对它进行编译:”
“师兄,您这样做的目的是???”
“马上你就知道了,我们继续修改:“
“你再次编译看看”
“师兄,这是不是编译失败了?”张小飞说到
诸小亮:“是的,我给你解释一下”
在 Java 中,默认所有整数都是 int 类型,所以 300 被当成 int 类型代码中,要把 300 赋值给一个 byte 类型的变量,而 byte 的取值范围是 -128~127 ,根本容不下300,所以提示:“从 int 转换到 byte 可能会有损失”而 byte b = 3; 虽然 3 也被当作 int,但 3 在 byte 的范围内,编译时会自动转为 byte 类型
张小飞:“原来是这样,我明白了,这表示之后使用整数时要先确定它具体是哪个类型”
“没错,我们继续定义其他整数类型”诸小亮说到
“师弟,注意,上图的代码编译,还会报错:”
张小飞疑惑的问道:“这不对吧, 之前说过 long 类型的最大值是 2 的63次方 - 1,而 12345678900 远远小于这个值,为什么还报错呢?”
诸小亮:“原因:在 Java 中默认认为所有整数都是 int 类型,报错是因为 12345678900 超过了 int 的最大值”
“原来是这样,那该怎么办呢?”
“很简单,只需要在12345678900后面加上一个 L 就行了,表示这个数字是 long 类型,比如:”
“你再次编译试试看”
张小飞:“确实,修改后再次编译,不报错了:“
3. 自动类型提升
“师兄,自动类型提示是什么意思?”
用代码演示一下你就明白啦,还是修改之前的代码:”
结果:
张小飞:“3+4=7,这不是很正常嘛”
诸小亮:“你仔细看,代码中,x是 byte 类型,y是 int 类型,为什么 x+y 的值 可以赋给 z 呢?”
“是啊,为什么?”张小飞恍然大悟道
“这就是自动类型提升”
不同类型数据计算时,小类型会自动转换为大类型
“你的意思是,x +y 时,自动把 x 从 byte 升级到了 int 类型?”
“是的,你理解的完全正确,不过要注意一点:同类型计算也可能出问题,比如:”
public static void main (String [] args) { short a=1; short b=2; short c= a + b;}
结果:
张小飞:“这是为什么呢?a 、b 、c 都是 short 类型啊”
诸小亮:“因为:int 是 java 中整数的默认类型,小类型(byte、short)的计算同样会自动类型提升”
“那,两个 int 类型做计算时,会自动提升为 long 类型?”
“这个倒是不会,记住:int 是 java 中整数的默认类型”
“好吧,int 是 java 中整数的默认类型,这个你说了很多遍了,我记住了”
“很好,孺子可教也”
4. 强制类型转换1. 演示
诸小亮:“师弟,你能参考自动类型提升,来解释一下什么是 强制类型转换 吗?”
张小飞思索了一下,说到:“自动类型提升是小类型升级为大类型,强制类型转换是大类型转为小类型?”
“没错,是这个意思,我们先看一段代码:”
public static void main(String[] args){ //计算 x + y,并输出结果 byte x = 3; int y = 4; byte z = x + y; System.out.println(z);}
“师兄,这段代码有问题吧”
“哦?你来说说看是什么问题”诸小亮好奇的问道
“x 是 byte 类型,y 是 int 类型,按照刚才的说法: x+y 时 x 会自动提升为 int 类型,所以 x+y 的结果是 int 类型 ,把一个 int 类型的值赋给 byte 类型的 z 不是有问题吗?如果我记得没错的话,编译的时候应该会提示:从 int 转换到 byte 可能会有损失”张小飞回答到
“厉害,你说的一点儿都不错,这是编译的结果:”
“但是,如果告诉你有一种方法可以让上面的代码赋值成功呢?你想不想知道?”
“师兄,你就别卖关子了,直接说吧”
“我们继续修改代码:”
“这样编译就不会报错,程序也正常运行:”
张小飞:“原来这就是强制类型转换啊,很简单嘛”
诸小亮:“是的,确实很简单,但是如果使用不当,也会造成一些问题的”
“什么问题?”
“来,我们再次修改代码,这次修改 y = 400”
“你看看最终输出的结果是多少”
“这个。。。,怎么会是一个负数?”
“因为:x + y =403,这是一个 int 类型的数值,强制转换为 byte 后,精度缺失造成的”
“精度缺失???”张小飞疑惑的问道
“是的,想要彻底明白这个问题,我们需要先聊一聊二进制”
“。。。。。。二进制又是什么鬼”
2. 神奇的—二进制
诸小亮:“二进制:本质是一种计数方式,也是计算机语言”
计数方式:十进制(满10进1),60进制(60s=1m),7进制(7天=1周)二进制比较特殊,是满 2 进 1,比如:1+1=10,10+1=11,11+1=100注意:二进制都由 0 和 1 组成
张小飞:“这个计数方式我能理解,不过它也是计算机语言?”
“是的,在计算机中,一切都是以二进制形式存在的,不同的 01 组合代表不同的含义,使用不同的 01 组合代表世间万物,所以就有虚拟世界这一说法”
比如:01010代表:我,01011代表:你,0000000111111代表:他注意:这里只是举个例子,并不是说 ‘我’ 在计算机中对应的就是:'01010'
张小飞:“有点儿意思,按照您的说法,数字在计算机中也是用二进制表示”
诸小亮:“没错”
“师兄,可否让我见识一下,一个十进制数字用二进制怎么表示?”
“当然可以,网上有很多进制转换的工具,比如:”
“这个,10 具体是怎么变为 1010 的呢?”张小飞问道
“转换的方法不是重点,重点是:int a = 10;,那它的二进制实际是:00000000 00000000 00000000 00001010”
良久,张小飞:“我明白了,因为 a 是 int 类型,占 4 字节 ,也就是占 32 个位对吧”
“是的,其实把一个数字换位二进制分两步:”
1. 利用上面的网址转换为二进制2. 在左侧补0,具体补多少个0,就看它是那种类型的
张小飞:“我来试一下,如果 byte b = 3 ,那么它的二进制是:00000011”
“完全正确”
“师兄,如果是一个负数呢?您提供的网站工具是这样显示的:”
“上面给的不对,负数的二进制稍微麻烦一些,以 byte b = -10 为例,分为 3 步:”
1. 先获取它的正数的二进制,是:00001010,这称之为:-10 的原码2. 将原码的每一位做取反,得到反码:111101013. 将反码+1:11110110,这就是 -10 的二进制
“师弟,其实这个负数的转换,了解一下就行了,实际时候用的并不是很多”
“好的,不过到现在我也不明白,这个跟 精度缺失 有什么关系呢?”
3. 最终解惑
诸小亮:“我们回忆一下:x + y = 403,是 int 类型,占 4 字节(32位),那么它的二进制。。。”
“403 的二进制是:00000000 00000000 00000001 10010011”张小飞抢着说到
“没错,而我们的代码是把 int 类型转为 byte 类型”
byte 类型,占 1 个字节,int 类型 转换为 byte,就是要丢掉3个字节,这就是精度缺失
“丢掉 3 个字节,那不是变成 00000000 了吗?这应该是 10 进制中的 0 啊”张小飞说到
“错了,应该是丢掉左侧的3个字节,那么剩下:10010011,而它的十进制就是 -109 ”诸小亮回复道
“原来如此”
“师弟,在告诉你一个结论:计算机中,二进制最左侧以 1 开头的都是负数”
“明白!!!”
5. 小数类型
诸小亮:“我们接着看小数类型,也就是浮点数类型,这个就比较简单了”
float 和 double,double的精度更高一些精度:精确程度,小数越多,精确成度就越高
“但是,实际开发中一般不用 float ,为了数据的准确性,都使用double,比如:”
编译会报错:
张小飞:“让我猜一猜,报错的原因是: Java 中默认认为所有小数都是 double 类型”
“是的,如果要用 float 类型,需要在末尾加上一个 f,比如:”
6. 布尔和字符类型
诸小亮:“布尔类型很简单,定义一个boolean类型的变量如下:”
张小飞:“这个很容易理解,我疑惑的是 char 类型为什么是数字?”
“先看一段代码,然后再给你解释”
结果:
“师兄,说实话,这个代码和输出结果,让我更加的迷糊了”
“来,我给你解释一下:”
计算机能理解的语言是:二进制,而人类的语言是:abc、你我他、0-9、!@#$%等,为了方便的跟计算机沟通,先辈们使用二进制跟人类语言做了个映射比如:01100001---->a,01100010---->b这种映射关系称为:ASCII编码表
“就是用二进制来表示世间万物嘛,这个我懂,但是没想到前辈们竟让做了一张表出来,这个表是什么样子的?”
“来看下面的这张图:”
“从图中可以看出,01100001转换为 10 进制就是 97,也就是字母 a,正因为这样,所以 char 类型的值可以是数字也可以是字符”
“那为什么代码中两个输出,一个是数字,一个是字符呢?”张小飞接着问
“上面代码的执行过程是这样的:”
计算机先把 97 转换为二进制:01100001执行 println 时,因为 c 是 char 类型,所以就通过ASCII编码表找到了a,并输出执行:c2 + 2 时,因为类型不同,c2先做类型提升(转换成97),所以最终结果是 int 类型的 99
张小飞:“原来如此,这下我就明白了”
诸小亮:“那么我们接着说,接下来是。。。。”
“停停停,师兄,这都中午了,该歇一歇了吧,肚子都饿扁了”
“哦?没想到时间过的这么快,那好吧,走吃饭去,回来后你好好练一练”
“啊?不会吧,正所‘食饱思眠欲’,吃过饭后不应该睡一觉吗?”
“大白天睡什么觉,浪费生命”
“这你就不懂了,睡觉是一种艺术,睡不好是你糟塌了,没听过吗?‘少睡一分钟,就缺少60秒的幸福’”
“行行行,我说不过你,不过下午可不会再给你时间练习的”
“放心吧,这也没多少东西,早就记牢了”
标签: #二进制10010011转化为十进制