Java中Byte的范围是如何计算的?
在说byte之前,我们先来说说比特,比特是表示信息的最小单位,是二进制数的一位包含的信息或2个选项中特别指定1个的需要信息量。一般来说,n比特的信息量可以表现出2的n次方种选择。而byte意为“字节”,是计算机文件大小的基本计算单位。1byte=8bits,两者换算是1:8的关系。1bit 只能有一个值,0 或者 1。
在《Head First Java》中的描述byte(基本数据类型,装配类型为Byte)作为Java中4中基本整数类型的一种,其它三种是long、int、short。通过前面的了解,byte是1个字节,也就是8位,以杯子类比,每种整型类型变量有固定的位数(杯子大小):byte,8bits,-128~127;short,16bits,-32768~32767;int,32bits,-2147483648~2147483647;long,64bits,-很大~+很大。
具体的关于byte的计算方式,推荐以下两种,混合着进行理解记忆。
第一种是机器内存储结构的分析:
在计算机内,定点数有3种表示法:原码、反码和补码
[原码]二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
[反码]表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
[补码]表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
计算机数据是用补码表示的,正数的补码就是它的原码,而负数的补码是将其原码(取绝对值后的原码)取反加1得到的。
第二种是byte概念意义上的理解:
1.确定byte是1个字节,也就是8位
2.最大的应该是0111 1111,因为第一位是符号位,0表示正数
3.最小的应该是1000 0000(1111 1111是是负数-1的补码)
4.0111 1111即127
5.1000 0000按照上面的解释为先减一,得到0111 1111,然后按位取反得到1000 0000,该结果为欲求负数的绝对值,所以结果是-128(和概念反着来求出该负数)。
作者:夕阳雨晴,欢迎关注我的头条号:偶尔美文,主流Java,为你讲述不一样的码农生活。
在这里我们需要先了解另一个单位:bit “比特”,bit是计算机进行数据存储的最小单位,计算机内部利用二进制存储数据,一bit(比特)就代表一位二进制。即一个bit就代表一个0或1。
而Byte(“字节”)是计算机进行数据存储的基本单位。一Byte有八位二进制也就是1Byt = 8bit
数据的存储又分为有符号和无符号数,有符号数二进制的最后高代表符号,0代表+(正),1代表-(负),如:有符号数011 转换为十进制为2^0+2^1=3,无符号111转换为十进制则为-3。(有下划线的数字代表符号位,后面同样如此)
然后我们开始正式介绍Byte范围的计算
当Byte无符号时
Byte的范围可以由二进制表示为 0000 0000 ~ 1111 1111,
将二进制转化为十进制:
0000 0000 = 0;
1111 1111 = 2^0+2^1+2^2+2^3+2^4+2^5+2^6+2^7 = 255;
所以Byte的取值范围为 0 ~255 。
当Byte有符号时
由于最后一位变为了符号位 所以0 1111111成了最大的数。
将二进制转化为十进制:
0 1111111 = 2^0+2^1+2^2+2^3+2^4+2^5+2^6 = 127;
负数需要用补码表示,1 1111111的绝对值取反得到0000000 转换为十进制为 0加一取反则为补码 :-1
将1 0000000的绝对值取反得到11111111 转换为十进制为 127
再加一取反为 -128
所以Byte有符号时的取值范围为 -128~127
java采用的有符号存储,所以java中Byte的取值范围采用有符号时计算。
JAVA求数的最大公约数,用递归方法,求解释,执行递归时是怎样执行的?
程序从main开始,再到你定义的方法gcd,进行调用,80%50不等于0,执行else语句,到gcd在进行调用gcd方法,不过2个参数为50和80%50的值30,50%30不等于0,继续调用gcd方法,直到 if(a % b == 0)的值为TRUE为止,结果返回给int t 继续执行剩下的语句。借用回答者: 缘心风绝 80 % 50 = 3050 % 30 = 2030 % 20 = 1020 % 10 = 0 出递归10是最大公约数。 这样比较清楚
我听很多人说JAVA已经过时了,下一个要淘汰的语言就是JAVA,真的是这样吗?
先说结论:Java正在过时,并且可能会被淘汰。
每次有人唱衰Java的时候,都会有一群Java程序员愤怒地出来反驳,我也曾是其中的一员。但是现在我更喜欢尊重事实,拿数据说话。
从TIOBE网站每月提供的编程社区指数,我们可以清晰地看到,Java的占比从2001年6月的26.49%逐渐减少到今年(2021)6月的11.54%,20年间下降了15%。这个排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并根据各大搜索引擎的搜索热度以及Wikipedia、Amazon、YouTube统计出的排名数据,可以说能够客观反应出各编程语言的热门程度。因此,我们可以得出结论:Java正在逐渐走向衰落。
下面我将试着分析Java市场份额逐渐减少的原因,以及Java语言的优缺点,希望能对你有所帮助。
Java占比减少的原因:
- 各种新语言的崛起。Java鼎盛的时候,市场的竞争对手很少。而这些年,随着计算机硬件的发展以及互联网的普及,各种编程语言也随之井喷式地出现。每种相对热门语言出现和发展都会吸走一部分热度,并带起新的一波唱衰Java的节奏。这些语言的代表早期有C#,最近有Go。
- JVM体系中一些“Better Java”的出现。由于Java语言本身的一些弊病(下文会详细说),JVM上出现了一些语言,如Scala、Groovy、Kotlin,它们打着“Better Java”的旗号,采用和Java互通的形式发展。一些对Java体验不满的团队,可能会选择转向这些语言。
- 互联网热点的切换。前些年服务器端编程可能是互联网领域的主流,近年来由于机器学习、大数据等概念的兴起,对这些概念支持更好的语言得以兴起,如python、R、Scala等。
- Java语言自身的缺陷。
Java语言的缺陷:
- 语言特性不够丰富。Java具有跨平台和向下兼容这两大卖点,但它们同时也是Java语言沉重的包袱。带着这些包袱,Java只能缓慢保守地增加语言特性。一些其他成熟语言具备的特性,Java只能选择不支持或通过替代的方式支持。如Java中没有函数的数据类型,使用“类型擦除”的方式实现泛型等。
- 语法过于啰嗦。Java的样板代码可能是所有编程语言里最多的。Python程序员100行代码可以搞定的事情,Java程序员可能要写上500行代码。
- 应用场景不是刚需。Java虽然在服务器编程方面找到了统治地位,但是这种统治地位并不牢固。具有服务器编程能力的语言太多了,如php、python、Go、dart等,甚至js这种浏览器端的语言也来凑个热闹,搞了node.js专门用于服务端编程。
- 对多线程的支持不友好。Java对多线程的支持设计得非常不友好,即使经验丰富的程序员,也容易编写出产生致命缺陷的代码。
Java语言的优势:
- 上手简单。Java的语法少,并且非常符合直觉,非常适合作为新人的入门语言。
- 生态完整,社区活跃。有海量的第三方框架和依赖包,基本上各个领域都能找到成熟的解决方案。
- 跨平台。对各个平台的支持比较完善,基本可以实现“一次编写,到处运行”。
- 存量项目多。Java运行在数以亿计的硬件设备上,这些系统的维护工作足以养活一大批Java开发的程序员。
Java程序员何去何从?
- 首先不要过分焦虑,Java被淘汰不会是一两天的事情。
- 其次不要把鸡蛋放在一个篮子里,多掌握一些技术,技多不压身。
- 最后提高对自己的要求,多修炼内功,从原理上理解编程,这样就可以不受语言的限制,随时能够适应新的领域的工作。
哪门语言被淘汰都不稀奇,淘汰java那就省省吧,看看java的生态,懂的自然全都懂。黑java的喷java的唱衰java的,十几年来数不胜数,别的语言可没这个实力。java是过时了,但java生态一直在与时俱进呀,且越来越不可取代了。java就算被取代,别的语言也没啥好高兴的,因为大概率是被其他jvm语言取代了
Java 是一种非常流行的编程语言,它在企业和开发者社区中都有很高的普及率,并且被广泛应用于各种领域。从这个意义上说,它确实没有被“淘汰”。
然而,随着新的编程语言和技术的不断出现,Java 也面临着挑战。新的语言和技术,如 Python、Scala、Kotlin、Rust、Golang 等语言,正在吸引着越来越多的开发人员。同时,随着数据科学和机器学习领域的发展,Python 等语言也逐渐成为了主流。
不过,Java作为历史悠久的编程语言,仍然具有很强的生命力,在很多领域仍然有着广泛的应用。例如,企业应用程序、移动应用程序、游戏开发、云计算、大数据等领域中都有Java的存在,还有就是Java最为稳固的生态,这也就保证了Java在未来也将继续保持其重要地位。
另外, Java的企业版本 JavaEE 以及 Spring 框架在微服务领域有着不错的表现,在新兴的微服务架构中,Java也保持着重要的地位。
总的来说,想要取代Java也并非一朝一夕之事,Java 不会因为新的语言和技术的出现而迅速淘汰,它仍然是一种非常重要的编程语言,未来也将继续保持其重要地位。
还没有评论,来说两句吧...