Day09——运算符

news/2024/12/31 1:25:37/文章来源:https://www.cnblogs.com/xiaokunzhong/p/18448890

基本运算符

运算符

Java 语言支持如下运算符: (重点掌握前4个)

算术运算符:+、-、*、/、%、++; --

赋值运算符: =

关系运算符:>、<、>=、<=、==、!=、instanceof(稍后再讲)

逻辑运算符:&&、||、!

位运算符:&、|、^、~、>>、<<、>>>;(了解)

条件运算符: ? :

扩展赋值运算符:+=、-=、*=、/=。

详细解释:

/ 除法

% 取余 左操作数除以右操作数的余数

= 赋值运算符,将右操作数的值赋给左侧操作数,C = A + B将把A + B得到的值赋给C

== 判断如果两个操作数的值是否相等,如果相等则条件为真。

!= 判断如果两个操作数的值是否不相等,如果值不相等则条件为真。

按位与(&) :对两个整数的二进制表示的每一位进行与运算。只有当两个相应位都为 1 时,结果位才为 1,否则为 0。 例如:5(二进制为 0101)& 3(二进制为 0011),结果为 0001,即 1。

按位或(|):对两个整数的二进制表示的每一位进行或运算。只要两个相应位中有一个为 1,结果位就为 1。 例如:5(二进制为 0101)| 3(二进制为 0011),结果为 0111,即 7。

按位异或(^):对两个整数的二进制表示的每一位进行异或运算。当两个相应位不同时,结果位为 1相同时为 0。 例如:5(二进制为 0101)^ 3(二进制为 0011),结果为 0110,即 6。

按位取反(~):对一个整数的二进制表示的每一位进行取反操作。0 变为 1,1 变为 0。 例如:~5(二进制为 0101),结果为 1010,由于计算机中以补码形式存储,所以结果为 -6。

左移(<<):将一个整数的二进制表示向左移动指定的位数。左移一位相当于乘以 2。 例如:5(二进制为 0101)<< 1,结果为 1010,即 10。

右移(>>) :将一个整数的二进制表示向右移动指定的位数。正数右移一位相当于除以 2,负数右移时,高位补符号位。 例如:5(二进制为 0101)>> 1,结果为 0010,即 2。

无符号右移(>>>): 无论操作数是正数还是负数,无符号右移都用 0 填充高位。 例如:-5(二进制为 11111111111111111111111111111011)>>> 1,结果为 01111111111111111111111111111101,即 2147483645。

逻辑运算符:判断与 或 非的关系 and or

//二元运算符   两个数的运算//Ctrl+D  复制当前行到下一行int a=10;int b=20;int c=25;int d=25;System.out.println(a+b);System.out.println(a-b);System.out.println(a*b);System.out.println((double)a/b);  //在计算时,要小心结果小数部分四舍五入的问题。可以把一个数转换类型

不同整数类型计算,结果类型

 //不同整数类型相加,结果的类型研究long a=123123123123123l;int b=123123123;short c=17;byte d=1;System.out.println(a+b+c+d);//long类型System.out.println(b+c+d);  //int类型System.out.println(c+d);    //int类型 //在这段代码中,c是short类型,d是byte类型。当进行c + d运算时,Java 中会将byte和short类型自动提升为int类型进行计算。/*总结:不同整数类型相加,有long类型参与,结果为long类型;没有long类型参与,结果为int类型当byte和short类型进行计算时,byte和short类型自动提升为int类型进行计算。*/

总结:

不同整数类型相加,有long类型参与,结果为long类型;
没有long类型参与,结果为int类型
当byte和short类型进行计算时,byte和short类型自动提升为int类型进行计算。

不同整数类型的范围

在 Java 中,byteshortintlong都是整数类型,它们的取值范围如下:

  1. byte: - 占用 1 个字节(8 位)。 - 取值范围是 -128 到 127。这是因为使用二进制补码表示法,最高位为符号位,0 表示正数,1 表示负数。具体范围计算为 -2 的 7 次方到 2 的 7 次方减 1,即 -128 到 127。

  2. short: - 占用 2 个字节(16 位)。 - 取值范围是 -32768 到 32767。同样采用二进制补码表示法,范围为 -2 的 15 次方到 2 的 15 次方减 1。

    3.int: - 占用 4 个字节(32 位)。 - 取值范围是 -21_4748_3648 到 21_4748_3647。范围为 -2 的 31 次方到 2 的 31 次方减 1。

    4.long: - 占用 8 个字节(64 位)。 - 取值范围是 -922_3372_0368_5477_5808 到 9223372036854775807。范围为 -2 的 63 次方到 2 的 63 次方减 1。

不同浮点数类型相加,结果的类型研究

//不同浮点数类型之间的计算float i1=1.5f;double i2=3.0;System.out.println(i1/i2);   //double类型//总结: float和double之间计算,结果为double

总结:

float和double之间计算,结果为double

float和double存储大小和精度

  1. 存储大小
    • float占用 4 个字节(32 位)。
    • double占用 8 个字节(64 位)。
  2. 精度
    • double的精度比 float高得多。具体来说,float可以提供大约 6 - 7 位有效数字,而 double可以提供大约 15 - 16 位有效数字。

整数与浮点数之间的计算

//整数与浮点数之间的计算System.out.println(a+i2);//1.231231231231237E15  double类型System.out.println(b+i1);//1.2345679E8           float类型/*在这段代码中,int类型的b与float类型的i1进行计算。计算结果为:123456789 + 1.5f等于123456790.5。结果类型是float类型经过自动类型提升后的float类型(因为int和float运算时,int会自动提升为float)。但是如果直接打印,由于System.out.println在打印float和double类型时,会将其转换为String类型输出,可能会以小数形式输出结果。*///为了输出b+i1的准确结果,在已知结果是float类型时,可以使用System.out.printf进行格式化输出,可以控制输出的小数位数,这里设置输出结果保留两位小数。这样可以更准确地查看结果。float result = b + i1;System.out.printf("b + i1 的结果为:%.2f%n", result);

总结:
1.整数与浮点数计算,结果的类型和浮点数的类型保持一致。浮点数类型为float,结果为float;浮点数类型为double,结果为double;

2.在Java中,当你看到一个数值以科学计数法的形式表示,如 1.231231231231237E15,这通常意味着该数值是一个double类型的浮点数.浮点数的小数部分通常无法精确表达,也就无法准确知道小数点后有多少位。也可以说,因为这个数后面没有带f,因为这个数小数点后有效数字超过7位,所以不是float类型

  1. System.out.println在打印float和double类型时,会将其转换为String类型输出,可能会以小数形式输出结果。

关系运算符

 //关系运算符返回的结果:正确、错误    布尔值int i1=10;int i2=12;System.out.println(i1==i2);//falseSystem.out.println(i1!=i2);//trueSystem.out.println(i1<i2);//trueSystem.out.println(i1>i2);//falseSystem.out.println(i1<=i2);//trueSystem.out.println(i1>=i2);//falseSystem.out.println(i2%i1);  //2

自增自减运算符

//++  --   自增 自减   一元运算符  难点!!!!!!!!!!!!!!int a=3;int b=a++;            //a++  a先赋值给b,然后a自增  a=a+1//a=4;b=3int c=++a;            //++a   a先自增,再给b赋值System.out.println(c);//c=5System.out.println(a);//a=5/*System.out.println(a);//5System.out.println(a);System.out.println(b);//3System.out.println(b);System.out.println(c);//5System.out.println(c);*///一定要上手算一遍,才知道a++和++a的区别!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

要点:

a++ a先赋值给b,然后a自增

++a a先自增,再给b赋值

幂的计算

//拓展——幂的计算System.out.println(Math.pow(2,3));//8.0//Math.pow()方法返回数据是double类型

总结:

Math.pow()方法返回数据默认是double类型

逻辑运算符

//逻辑运算符//与(and)   或(or)    非(取反)boolean a=true;boolean b=false;System.out.println("a&&b:"+(a&&b));  //false  逻辑与运算:两个结果都为真,结果才为真System.out.println("a||b:"+(a||b));  //true   逻辑或运算:有一个结果为真,结果为真System.out.println("!a&&b:"+!(a&&b));//true   逻辑非运算:如果是真,则为假System.out.println("==============================");//短路运算:// 当a&&b,a为false时,程序会不会检查b的情况?int c=5;boolean d=(c>6)&&(c++<1);System.out.println(d);//falseSystem.out.println(c);//5  (c++<1)没有被程序所运算//总结:当a&&b,a为false时,程序不会检查b的情况而直接输出false

总结:

&& 与运算:两个结果都为真,结果才为真

|| 或运算:有一个结果为真,结果为真

! 非运算:如果是真,则为假

位运算符

//位运算符          位运算效率高/*A=0011 1100B=0000 1101
-------------------------------------------------------------A&B 0000 1100       & 与  两位相同为0,不同为1A|B 0011 1101       | 或  两位有1个1,就为1A^B 0011 0001       ^ 异或  两位不同为1,相同为0~b  1111 0010       ~ 相反  1变0;0变1<<   左移   相当于乘二>>   右移   /2
-------------------------------------------------------------*///利用位运算符快速计算2*8     2*2*2*2System.out.println(2<<3);/*0000 0000          00000 0001          10000 0010          20000 0011          30000 0100          40000 1000          80001 0000          16         每乘一个2,二进制的1就左移1位*/

注意:

& 与 对应的两个二进位均为1时,结果位才为1 ,否则为0。

| 或 两位有1个1,就为1

^ 异或 两位不同为1,相同为0
相反 1变0;0变1

<< 左移 相当于乘二

扩展赋值运算符

//扩展赋值运算符   可偷懒/*int a=10;int b=20;//a+=b;   //a=a+ba-=b;   //a=a-bSystem.out.println(a); //-10System.out.println(b);  //20System.out.println(a+b); //10*/

总结:

a+=b 相当于 a=a+b

a-=b 相当于 a=a-b

字符串连接符

//字符串连接符         +int i1=10;int i2=20;System.out.println(i1+i2);//30System.out.println(""+i1+i2);//1020    字符串在前面,后面的会进行拼接;System.out.println(i1+i2+"");//30       字符串在后面,前面的会进行运算//注意:""+i1+i2  和    i1+i2+""   含义不一样

注意:

""+i1+i2 和 i1+i2+"" 含义不一样

三元运算符

//三元运算符   ? ://x ? y : z//如果x==true,结果为y;否则结果为zint score=55;String result=score<60 ? "成绩不及格":"成绩及格";System.out.println(result);//成绩不及格

总结:

x ? y : z
如果x==true,结果为y;否则结果为z

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808956.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【THM】The Marketplace练习

脚本小子是这样的,黑客只要写POC就可以,可是脚本小子要考虑的事情就多了。 学到了新知识:利用XSS漏洞进行钓鱼、通过Token获取管理员权限、利用docker提权【THM】The Marketplace练习 与本文相关的TryHackMe实验房间链接:TryHackMe | The Marketplace 简介:你能接管marke…

Windows计划任务出现0x1错误结果

Windows计划任务出现0x1错误结果现象 解决方法 结果 现象 参考不少的文章,基本上都是说因为权限的问题,但试了N次都不行,仍然报0x1的错误结果,亲测解决方法说明如下; 1.脚本本身没问题,手动本地可以执行; 2.系统版本 Windows 10 专业工作站版 版本号 21H2 解决方法 在设…

面相快速入门教程2转化智慧

2 转化智慧 你的脸是遗传、环境和生活经历的产物。它展现了你的身份、经历和未来;它揭示了你独特的潜能,以及你需要什么才能感到幸福。你特征中的信息可以成为帮助你创造真正有意义和充实生活的绝佳资源。你所要做的就是照镜子。 事实上,你不需要知道什么特别的事情,就能从…

P10678 『STA - R6』月 题解

Solution 看了别的大佬的题解,感觉都是数学证明然后用树和图做的,看不懂啊。。。萌新瑟瑟发抖 用 vector 模拟树,然后贪心摸索做出来了。注意到要求最深叶子结点和最浅叶子结点的距离最短时的情况,那么此时根节点应该是树中度数最大的点,把树尽可能的拓宽,深度换宽度。 那…

学期(如2024-2025-1) 20241304 《计算机基础与程序设计》第2周学习总结

学期(如2024-2025-1)20241304 《计算机基础与程序设计》第2周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第二周作业)这个作业的目标 <…

Cisco Firepower 1000 Series FTD Software 7.6.0 ASA Software 9.22.1

Cisco Firepower 1000 Series FTD Software 7.6.0 & ASA Software 9.22.1Cisco Firepower 1000 Series FTD Software 7.6.0 & ASA Software 9.22.1 Firepower Threat Defense (FTD) Software - 思科防火墙系统软件 请访问原文链接:https://sysin.org/blog/cisco-firep…

从零开始学机器学习——网络应用

首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 今天,我们的主要任务是按照既定的流程再次运行模型,并将其成功加载到 Web 应用程序中,以便通过 Web 界面进行调用。最终生成的模型将能够基于 UFO 目击事件的数据和经纬度信息,推断出事件发生的城市地…

Cisco Firepower 4100 Series FTD Software 7.6.0 ASA Software 9.22.1

Cisco Firepower 4100 Series FTD Software 7.6.0 & ASA Software 9.22.1Cisco Firepower 4100 Series FTD Software 7.6.0 & ASA Software 9.22.1 Firepower Threat Defense (FTD) Software - 思科防火墙系统软件 请访问原文链接:https://sysin.org/blog/cisco-firep…

Cisco Firepower 9300 Series FTD Software 7.6.0 ASA Software 9.22.1

Cisco Firepower 9300 Series FTD Software 7.6.0 & ASA Software 9.22.1Cisco Firepower 9300 Series FTD Software 7.6.0 & ASA Software 9.22.1 Firepower Threat Defense (FTD) Software - 思科防火墙系统软件 请访问原文链接:https://sysin.org/blog/cisco-firep…

读数据湖仓08数据架构的演化

读数据湖仓08数据架构的演化1. 数据目录 1.1. 需要将分析基础设施放置在数据目录(Data Catalogue)的结构中1.1.1. 元数据1.1.2. 数据模型1.1.3. 本体1.1.4. 分类标准1.2. 数据目录类似于图书馆的图书检索目录1.2.1. 先通过图书馆的图书检索目录进行查找,以便快速找到所需的图书…

VUE2常见问题以及解决方案汇总,vue+element ui 问题以及解决方案汇总(不断更新中)

解决vue项目中 el-table 的 @row-click 事件与行内点击事件冲突,点击事件不生效(表格行点击事件和行内元素点击事件冲突)需要阻止事件冒泡 问题描述 1.点击列的编辑按钮,会触发按钮本身事件,同时会触发行点击事件 2.点击列的元素,会触发本身事件,同时会触发行点击事件 需…

1分钟了解什么是docker和docker-compose?前后端必知必会技能GET啦

@目录前情提要Docker定义:主要功能:命令示例:其他Docker Compose定义:我为什么使用它?主要功能:命令示例:主要区别配置文件:命令行操作:依赖关系管理:实际应用场景单个服务:多服务应用:总结结语欢迎路过的小哥哥小姐姐们提出更好的意见哇~~ 前情提要 本文非常简短,如果需要详…