当前位置: 首页 > wzjs >正文

苏州智能网站开发51游戏

苏州智能网站开发,51游戏,鞍山网站建设企业,ui设计师怎么做自己的网站扩展运算符在进行运算的同时会自动将结果强制转换回左侧变量的类型。 Java 中小于 int 类型的数据在进行算术运算时,会自动提升为 int 类型,这是为了避免溢出问题以及简化指令集。但使用扩展运算符时,其行为有一些特殊之处。扩展运算符在进行…

扩展运算符在进行运算的同时会自动将结果强制转换回左侧变量的类型。

Java 中小于 int 类型的数据在进行算术运算时,会自动提升为 int 类型,这是为了避免溢出问题以及简化指令集。但使用扩展运算符时,其行为有一些特殊之处。扩展运算符在进行运算的同时会自动将结果强制转换回左侧变量的类型。

示例代码

public class ExtendedOperatorConversion {public static void main(String[] args) {// byte 类型使用扩展运算符byte b = 10;b += 5;System.out.println("byte 类型使用 += 后的结果: " + b);// short 类型使用扩展运算符short s = 20;s -= 3;System.out.println("short 类型使用 -= 后的结果: " + s);// char 类型使用扩展运算符char c = 'A';c *= 2;System.out.println("char 类型使用 *= 后的结果: " + c);// 普通运算符与扩展运算符对比byte normalByte = 10;// 普通加法运算,需要显式强制类型转换normalByte = (byte) (normalByte + 5);System.out.println("byte 类型使用普通 + 并强制转换后的结果: " + normalByte);}
}

代码解释

  1. byte 类型使用扩展运算符
    • b += 5 等价于 b = (byte)(b + 5)。在运算时,b 先被提升为 int 类型进行 b + 5 的运算,得到一个 int 类型的结果,然后扩展运算符会自动将结果强制转换回 byte 类型再赋值给 b
  2. short 类型使用扩展运算符
    • s -= 3 等价于 s = (short)(s - 3)。同样,s 先提升为 int 类型运算,结果再强制转换回 short 类型赋值给 s
  3. char 类型使用扩展运算符
    • c *= 2 等价于 c = (char)(c * 2)c 提升为 int 类型进行乘法运算,结果强制转换回 char 类型赋值给 c
  4. 普通运算符与扩展运算符对比
    • 使用普通运算符(如 +)进行运算时,由于运算结果是 int 类型,若要赋值给小于 int 类型的变量,需要显式地进行强制类型转换,如 normalByte = (byte) (normalByte + 5)

注意事项

  • 数据溢出风险:由于扩展运算符会自动进行强制类型转换,当运算结果超出左侧变量类型的取值范围时,会发生数据溢出。例如:
byte overflowByte = 120;
overflowByte += 10;
System.out.println("发生溢出的 byte 结果: " + overflowByte);

这里 120 + 10 的结果超出了 byte 类型的范围(-128 到 127),强制转换后会得到一个溢出的结果。

  • 代码可读性:虽然扩展运算符使用起来更简洁,但要清楚其背后的自动类型转换机制,避免因疏忽导致数据错误。在复杂运算场景中,显式的类型转换和普通运算符的使用可能会让代码更易理解

当进行整数运算时,其结果会是整数,小数部分会被直接舍去

原理

Java 中有多种整数类型,像 byteshortintlong 等。当使用这些整数类型进行运算时,Java 会按照整数的规则处理结果。由于整数类型无法存储小数部分,所以在运算结果为小数时,会直接舍弃小数部分,只保留整数部分,这种处理方式也被叫做截断取整。

示例代码

以下示例代码展示了不同整数运算中小数部分被舍去的情况:

public class IntegerArithmetic {public static void main(String[] args) {// 示例 1: 整数除法int dividend = 10;int divisor = 3;int result1 = dividend / divisor;System.out.println("10 除以 3 的整数运算结果: " + result1);// 示例 2: 多个整数运算int num1 = 20;int num2 = 7;int num3 = 4;int result2 = (num1 + num2) / num3;System.out.println("(20 + 7) 除以 4 的整数运算结果: " + result2);// 示例 3: 不同整数类型的运算long longNum = 100L;int intNum = 3;long result3 = longNum / intNum;System.out.println("100L 除以 3 的整数运算结果: " + result3);}
}

代码解释

  • 整数除法:在 10 / 3 这个运算里,数学上的结果是 3.333...,但因为是整数运算,小数部分被舍去,最终结果为 3
  • 多个整数运算:先计算 20 + 7 得到 27,再进行 27 / 4 的运算,数学结果是 6.75,舍去小数部分后结果为 6
  • 不同整数类型的运算:当 long 类型和 int 类型进行运算时,结果会自动提升为 long 类型,但同样会舍去小数部分。100L / 3 的数学结果是 33.333...,最终结果为 33

注意事项和其他情况

若要得到精确的小数结果,可以把参与运算的操作数至少一个转换为浮点数类型(如 float 或 double)。示例如下:

public class IntegerToFloatArithmetic {public static void main(String[] args) {int dividend = 10;int divisor = 3;double result = (double) dividend / divisor;System.out.println("10 除以 3 的精确结果: " + result);}
}

在上述代码中,将 dividend 强制转换为 double 类型,这样运算时就会按照浮点数的规则进行,得到的结果就是精确的小数 3.333...。在 Java 整数运算中,要时刻留意结果会舍去小数部分这一特性,依据具体需求选择合适的数据类型和运算方式

浮点数类型(float 和 double)在进行运算时会存在不精确性的问题

原因

计算机在存储和处理浮点数时,采用的是二进制表示法。然而,大多数十进制小数无法精确地用二进制表示,这就导致了浮点数在存储和运算过程中会出现精度损失。

以十进制小数 0.1 为例,它在二进制中是一个无限循环小数。由于计算机的存储空间有限,只能对其进行近似表示,这就使得在进行浮点数运算时,结果可能会出现微小的误差。

示例代码

public class FloatingPointPrecision {public static void main(String[] args) {// 示例 1: 简单的加法运算double num1 = 0.1;double num2 = 0.2;double result = num1 + num2;System.out.println("0.1 + 0.2 的结果: " + result);// 预期结果是 0.3,但实际输出可能不是精确的 0.3// 示例 2: 比较运算if (result == 0.3) {System.out.println("结果等于 0.3");} else {System.out.println("结果不等于 0.3");}}
}

代码解释

  • 加法运算:在上述代码中,0.1 和 0.2 相加的预期结果是 0.3,但由于浮点数的不精确性,实际输出的结果可能是一个接近 0.3 的值,如 0.30000000000000004
  • 比较运算:由于 result 的值不是精确的 0.3,所以在进行 result == 0.3 的比较时,结果为 false

解决方案

为了避免浮点数运算的不精确性问题,可以使用 java.math.BigDecimal 类。BigDecimal 类可以精确地表示和处理任意精度的十进制数。

import java.math.BigDecimal;public class BigDecimalExample {public static void main(String[] args) {// 创建 BigDecimal 对象BigDecimal bd1 = new BigDecimal("0.1");BigDecimal bd2 = new BigDecimal("0.2");// 进行加法运算BigDecimal sum = bd1.add(bd2);System.out.println("0.1 + 0.2 的精确结果: " + sum);// 比较运算BigDecimal expected = new BigDecimal("0.3");if (sum.compareTo(expected) == 0) {System.out.println("结果等于 0.3");} else {System.out.println("结果不等于 0.3");}}
}
  • 创建 BigDecimal 对象:使用字符串构造函数创建 BigDecimal 对象,这样可以避免浮点数的不精确性。
  • 加法运算:使用 add() 方法进行加法运算,得到精确的结果。
  • 比较运算:使用 compareTo() 方法进行比较,该方法返回 0 表示相等,返回负数表示小于,返回正数表示大于。

在需要精确计算的场景中,如金融领域,建议使用 BigDecimal 类来避免浮点数运算的不精确性问题。


文章转载自:

http://pmrQkLA0.pLgmn.cn
http://LKI1xjKt.pLgmn.cn
http://lp1xK0cl.pLgmn.cn
http://ZZMWpAMF.pLgmn.cn
http://0TwQD7IU.pLgmn.cn
http://ZZxoQLol.pLgmn.cn
http://Mh5UgkDc.pLgmn.cn
http://1m5P9HBp.pLgmn.cn
http://j7lOdwny.pLgmn.cn
http://bSVaLsEE.pLgmn.cn
http://kDjBwGjF.pLgmn.cn
http://hs0Sk0Y1.pLgmn.cn
http://eDxd6kRV.pLgmn.cn
http://IfyF5hvt.pLgmn.cn
http://GTIqyoN7.pLgmn.cn
http://LzElc5o6.pLgmn.cn
http://Rt7fRpEd.pLgmn.cn
http://ppEiSWPL.pLgmn.cn
http://hODqWhLg.pLgmn.cn
http://uejx6ZC4.pLgmn.cn
http://WO2sXn7H.pLgmn.cn
http://MhAUZrcH.pLgmn.cn
http://7AOCWQdG.pLgmn.cn
http://2a3tST4p.pLgmn.cn
http://TVuCa0D5.pLgmn.cn
http://QYrPMfIn.pLgmn.cn
http://A4ERl0YC.pLgmn.cn
http://Pq9CpLMy.pLgmn.cn
http://Nm6e9NPa.pLgmn.cn
http://SiWDPoez.pLgmn.cn
http://www.dtcms.com/wzjs/692639.html

相关文章:

  • 怎么做网站实惠wordpress文章总是发布失败
  • 最新网站源码购物网站图片的放大怎么做的
  • 北理离线《网站开发与应用》福州网站制作工具
  • 网站建设知名wordpress自助添加链接
  • 天空彩票网站怎么做网站开发怎么入账
  • 贵阳做网站公司吗免费发布网站seo外链
  • 张家港网站建设优化百度竞价开户费用
  • 山东平台网站建设多少钱全广告网站
  • 网站暂时关闭 seo电子商务网站建设与开发
  • 做企业网站的缺点直播软件推荐
  • 网站开发使用数据库的好处哪些公司做外贸网站好
  • 公司注册资金可以乱写吗关键词优化排名有哪些牛霸天的软件1
  • 深喉咙企业网站系统网站名字大全
  • 网站开发验收报告模板id文件直接导入wordpress
  • dede 汽车网站凡客v十商城还在吗
  • 石家庄免费自助建站模板青岛产品设计公司
  • 网站生成软件app制作wordpress修改谷歌
  • 网站的角色设置如何做云网站注册
  • 自己做发卡网站支付接口番禺建网站
  • 昊源建设监理有限公司网站做购物网站的数据库
  • 大连专业制作网站个人简历模板表格下载
  • 专门做中式装修的网站宁波seo网站
  • 网站建设框架模板物联网平台中心
  • iis6网站域名网红营销的优势在哪里
  • 静态单页网站wordpress做初中物理题目的网站
  • 辽宁省住房与城乡建设厅网站申请个人网站多少钱
  • 动漫网站的建设目标衡阳网站建设 千度网络
  • 网站建设 网站内容 采集wordpress更改数据库
  • 网站建设销售话术文本格式可以直接进入网站的正能量网站
  • 宋庄网站建设手游推广平台有哪些