初识java——javaSE(2)--运算符与逻辑控制【求个关注】

文章目录

  • 一 运算符
    • 1.1 算术运算符
      • 当两个不同类型的值相加时:
      • / 运算符
      • %运算符
    • 1.2 关系运算符
    • 1.3 逻辑运算符
      • 短路:
      • 逻辑非
    • 1.4 位运算符
      • &
      • |
      • ^
        • 位运算符当作逻辑运算符中使用
      • ~
      • >>
      • <<
      • >>>
    • 1.5 赋值运算符
    • 1.6 三目运算符
  • 二 逻辑控制
    • if语句
    • switch语句
    • 对于switch语句与if语句的差异
    • while语句
      • break与continue
    • do while 与for 语句


一 运算符

1.1 算术运算符

算术运算符有以下几种:+ - * / %

当两个不同类型的值相加时:

当两个不同类型的值进行相加时,较小类型的值其类型会自动转换成较大类型。

代码:

 byte a = 2;int b = 5;int c  = a+b;System.out.println(c);

在这里插入图片描述

  byte b1 = 5;int i = 5;byte b2 = b1+i;System.out.println(b2);

因为变量b1与i相加,首先b1自动转换类型为int ,然后b1+i的值为int类型,赋给byte类型b2,没有强制类型转换操作符,所以报错!
在这里插入图片描述

/ 运算符

当除数为0时:

     int a = 10/0;System.out.println(a);

在这里插入图片描述
输出结果显示异常,其提示是因为/ by zero,即除以0的原因。

 整数与整数之间相除,结果取整,对于小数部分则丢弃
   int a = 5;byte b = 2 ;System.out.println(a/b);

在这里插入图片描述

  整数与浮点数相除,结果为小数
int a = 5;double d = 2.0;System.out.println(a/d);System.out.println(d/a);

在这里插入图片描述

%运算符

%运算符的右操作数亦不能为0
   int b = 8%0;System.out.println(b);

在这里插入图片描述

整数与整数之间的取模,结果依然为整数,为正整数还是负整数取决于操作数的符号
   int a = 5;int b = 2;int c = -2;System.out.println(a%b);System.out.println(a%c);//正数对负数取模int a2 = -5;System.out.println(a2%b);//负数对正数取模
 整数与浮点数之间的取模,结果为浮点数,为正数还是负数,亦取决于操作数的符号
    int a2 = 5;float f1 = 2.0f;System.out.println(a2%f1);

在这里插入图片描述

  浮点数与浮点数之间的取模结果依然是浮点数,结果的符号,取决于操作数的符号
      double d1 = -5.0;double d2 = 2.0;System.out.println(d1%d2);

在这里插入图片描述

1.2 关系运算符

关系运算符:  > , < , == , >= ,  <=,!=
关系运算符与操作数组成的表达式为关系表达式,关系表达式的结果是布尔类型,值有两种,true与false
因此关系表达式是布尔表达式的一种。

举例:

        int a = 10;int b = 5;boolean  b1=  a>b ;System.out.println(b1);

在这里插入图片描述

1.3 逻辑运算符

逻辑运算符有:&& 逻辑与  || 逻辑或   !逻辑非
//&&的逻辑是两边的布尔表达式的结果都为true,则此逻辑表达式的结果为true,否则结果为false。
  int a = 10;int b =5;boolean b1 = a>b&&10>0;System.out.println(b1);

在这里插入图片描述

 ||  逻辑或
此运算符的逻辑是,两边的布尔表达式的结果均为false,此逻辑表达式的结果才为false,否则结果为true
   int a = 10;int b =5;boolean b1 = a>b||10<0;System.out.println(b1);

在这里插入图片描述

短路:

在java中的短路与c语言中的短路是一样的,这里再系统阐述一下:

 对于逻辑与 与 逻辑或 操作符的特性//提出了短路的思想//对于逻辑与操作符 ,如果左边的布尔表达式的结果为false,则此逻辑表达式的结果一定为false,所以右边的布尔表达式就不需要再//计算了,也不会再计算//这样是为了节省资源,减少不必要的执行
    int a =10;int b =5;//    boolean b2 = 10/0>5;   //这样会报警告boolean b1 =  a<b&& 10/0>5;//这个算式不会,原因就在于后面的表达式根本就没有执行!System.out.println(b1);

在这里插入图片描述

   int a = 6;int b = 4;boolean b1 = a>b|| 10/0>5;System.out.println(b1); //此时不会报警告,因为第一个布尔表达式值为true,所以第二个布尔表达式不会执行//也就不会报警告

在这里插入图片描述

逻辑非

此运算符的作用是用于改变布尔表达式的值,如果是false,则变为true,如果是true,结果是false
  System.out.println(!false);System.out.println(!true);System.out.println(! (10>0));

在这里插入图片描述

1.4 位运算符

 位操作符& 按位与|  按位或^  按位异或~  按位取反<<   左移二进制位>>   右移二进制位>>>  无符号右移动二进制位

&

&  按位与//   按位与的操作数有两个,针对的是操作数的二进制位//  运算规则为,如果两个操作数对应的二进制位均为1,则结果对应的位为1,否则为0
  byte a = 2;byte b = 3;//2 的二进制位为 ://0000 0010// 3 的二进制位为://0000 0011//则两个数的按位与结果为://0000 0010         转换为十进制,结果为2System.out.println(a&b);

在这里插入图片描述

 //针对按位与的特性,可以得出两个结论//一个数 按位与 其本身,结果还是其本身// 一个数 按位与 0 ,结果还是0  ;

|

//  |按位或//按位或的操作数有两个// 其运算规则为:如果两个操作数对应的二进制位均为0,则结果的该位为0,否则结果的该位为1
  byte a1 = 2;byte b2 = 3;// 0000 0010// 0000 0011//结果://0000 0011  ——转换为十进制,结果为3。System.out.println(a1|b2);

在这里插入图片描述

// 对于按位或的规则,我们可以得出结论://一个数按位或其本身,结果还是其本身

^

//     ^ 按位异或   按位异或也是二进制运算符,其操作数有两个
//   其运算规则是,将两个操作数对应的二进制位进行比较,如果相同,则结果中该位为0,不同该位为1
   byte a1  = 3;byte b1 = 5;// 3 的二进制:0000 0011// 5 的二进制:0000 0101//3^5 的结果: 0000 0110 ——转换为十进制为6System.out.println(a1^b1);

在这里插入图片描述

    // 一个数 按位异或 其本身,则结果为0// 一个数 按位异或  0,则结果为其本身
位运算符当作逻辑运算符中使用
    //1  按位与可当作逻辑与操作符,二者的差别在于前者没有短路
    System.out.println(3>0&4>0);System.out.println(3>0&10/0>1);

在这里插入图片描述

  // 按位或可当作逻辑或操作符,二者差别在于前者没有短路
 System.out.println(3<0|5>3);System.out.println(3>0|10/0>2);

在这里插入图片描述

~

  //按位取反的操作数与其他位运算符不同,操作数只有1个//其运算规则是将一个数的二进制位全部取反,即将1变成0,将0变成1
byte a3 = 5;// 0000 0101//按位取反的结果:~5:// 1111 1010 -- 这是补码// 1000 0101    — 转换成原码// 结果为 - 6System.out.println(~a3);

在这里插入图片描述

>>

//>> 操作符//>>运算符的操作数有两个,运算规则是将左操作数的各个二进制位向右移动右操作数值位,// 符号位由原来符号补上
    byte a = 2;// 0000 0010//a>>1// 0 0000 001   //0补上原符号位//0000 0001System.out.println(a>>1);byte a2 = - 3;//1000 0011 --原码//1111 1101 --补码//右移一位,符号位不变//1  1111  110//1111 1110--补码//1000 0010-- 原码  结果为-2System.out.println(a2>>1);

在这里插入图片描述

<<

// << 运算符的操作数亦有两个,运算规则是将左操作数的各个二进制位向左移动右操作数数值位,空出的位补0
    byte a1 = 3;/*0000 0011a1<< 1000 0011 00000 0110 ————转化为十进制为:6*/System.out.println(a1<<1);byte b1 = -3;//  1000 0011-- 原码//  1111 1101 -- 补码//    111 1101 0  ---左移一位补0//  1111 1010  --补码//  1000 0110  结果为-6System.out.println(b1<<1);

在这里插入图片描述

>>>

//  >>> 此运算符与>>运算符的不同之处在于>>>运算符是无符号右移,即补符号位时,只补0
 byte a1 = -3;// 1000 0011 -----原码// 1111 1101 ------补码//a1>>>1 无符号右移一位// 0 1111 110//0111 1110 结果为:126System.out.println(a1>>>1);  System.out.println(Integer.MAX_VALUE);

在这里插入图片描述

     //出现这个结果说明,变量在无符号右移时,自动转化成int类型

1.5 赋值运算符

 = ,+=,-= ,/= ,%= 
//    赋值运算符// 赋值运算符 =byte a = 5;  //意为将5赋值给变量a// +=a+=5;//a+=5,是一种简写,展开为://a = a+5 ;// -=a-=3;//同理,展开为:a =a-3;//*=a*=3;//同上,展开为:a=a*3;// /=a/=2;//同上,展开为:a=a/2;//%=a%=2;//同上,展开为:a = a%2;

1.6 三目运算符

 布尔表达式  ?表达式:表达式
三目运算符共有三个操作数,其运算规则是先判断?之前的布尔表达式的值为true还是false,如果为true ,
则执行 :之前的表达式,如果为false,则执行 :之后的表达式。
//  三目运算符int c=  5>0?3:2;System.out.println(c);

在这里插入图片描述

二 逻辑控制

java中逻辑控制与c语言中的一样,包括:顺序执行(顺序执行代码),
选择执行(if,switch语句),循环执行(while,for,do while)

if语句

对于if语句,java与c语言不同之处即在于java中if语句的判断条件必须是布尔表达式(单纯的一个布尔值也是布尔表达式),而c语言中没有这个限制。

public class test {public static void main(String[] args) {int a = 5;int b = 4;if(a>b){System.out.println("haha");}else {System.out.println("hehe");}boolean b1 = true;if(b1) {System.out.println("xixi");}/* if(a){System.out.println("luelue");}*/}

在这里插入图片描述
在这里插入图片描述
而在c语言中数字可以作为if语句的判断条件。这体现了java语言的严谨之处

switch语句

switch也是一种选择语句,根据()中值,选择对应的case,执行相应的语句。

   int a = 1;switch (a){case 1 :System.out.println(1);break;case 2:System.out.println(2);break;case 3:System.out.println(3);break;default:System.out.println("haha");}
上面的基本功能是与c语言一样的地方,与c语言不一样的地方在于:
switch语句()中允许的参数类型。

首先float类型不允许作为()中的参数类型

在这里插入图片描述
其次,double也不可以
在这里插入图片描述
long 类型也不可以
在这里插入图片描述
boolean 类型也不可以
在这里插入图片描述
上面的这四种类型不可以作为switch语句的参数
下面是可以作为参数的类型:
在这里插入图片描述
有些我们并没有学到,这里拿String类型举例:

String s1 = "haha";switch (s1){case "1" :System.out.println(1);break;case "2":System.out.println(2);break;case "3":System.out.println(3);break;default:System.out.println("haha");}

在这里插入图片描述
要注意,在java中switch语句的参数不可以是表达式,而在c语言中则可以
java:
在这里插入图片描述
c语言:
在这里插入图片描述

对于switch语句与if语句的差异

(1)switch语句不能使用复杂的判断条件,而if可以
在这里插入图片描述
不过在c语言中可以使用

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main(){int a = 10;int b = 3;switch (a > 2&& b<5) {case 1:printf("1");break;case 2:printf("2");break;case 3:printf("3");break;default:printf("haha\n");}
}

在这里插入图片描述
(2)switch语句可以嵌套,但是非常难看,代码的可读性较差

while语句

while语句与c语言中的区别在于其判断条件必须是布尔表达式,
当布尔表达式只是一个单纯的布尔值时,就会陷入死循环
int a = 3;
while (a<10){System.out.println(a);a++;
}

在这里插入图片描述

break与continue

在java中的break与continue的作用与c语言中的作用是相同的,这里再复习一下这两个语句的功能

break

break语句的作用是跳出当前的循环(即如果是多层嵌套循环的话,只跳出当前的一层)

   for(int i =0;i<2;i++){for(int j = 0;j<10;j++){if(j==3){break;}System.out.println(j);}}

在这里插入图片描述
此例中,当j==3时,执行break语句,跳出最内层循环,然后继续执行外层循环,所以会出现这个结果

continue

continue语句的作用是停止本次循环,而进入下一循环,注意不是跳出循环。

 for(int i =0;i<2;i++){for(int j = 0;j<10;j++){if(j==3){continue;}System.out.println(j);}}

在这里插入图片描述
在结果中我们看到并没有出现3,是因为j==3时,执行continue语句,进入下一循环,而不会指向打印3的语句。

do while 与for 语句

do while

do while语句的判断条件与while一样,必须是布尔表达式
它与while的区别在于while语句是根据判断条件的布尔值判断是否执行语句,而do while 的功能是先执行一遍语句,再根据判断条件判断是否继续执行。

do {System.out.println(3);
}
while (false);

在这里插入图片描述

for 语句

对于for语句,其判断条件可以是布尔表达式,也可以为空,当for语句的判断条件为空时,默认为恒为真。这会陷入死循环当中。

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

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

相关文章

Linux—-vim基础使用

1、基本概念 Vim的工作模式有四种&#xff0c;普通模式&#xff0c;输入模式&#xff0c;命令模式&#xff0c;可视模式。 在终端中打开vim&#xff0c;只需要输入vim 文件&#xff0c;在普通模式下按i就会进入到输入模式&#xff0c;按下:进入命令模式&#xff0c;输入:q就可…

如何取消xhr / fetch / axios请求

如何取消xhr请求 setTimeout(() > { xhr.abort() }, 1000)如何取消fetch请求 fetch()请求发送以后&#xff0c;如果中途想要取消&#xff0c;需要使用AbortController对象。 let controller new AbortController(); let signal controller.signal;fetch(url, {signal:…

Vue MVVM这一篇就够啦!

Vue vs React 相似之处: 它们都有使用 Virtual DOM虚拟DOM-CSDN博客&#xff1b;提供了响应式&#xff08;Reactive&#xff09;和组件化&#xff08;Composable&#xff09;的视图组件。将注意力集中保持在核心库&#xff0c;而将其他功能如路由和全局状态管理交给相关的库。R…

【driver3】proc文件系统,内存分配,数据类型/移植/对齐,内核中断,通过IO内存访问外设,PCI

文章目录 1.创建proc文件系统接口&#xff1a;之前调试内核时都是通过prink打印内核信息&#xff0c;通过dmesg查看输出的信息。新调试方法&#xff1a;利用proc文件系统在pro文件夹下创建接口&#xff0c;读写这个接口就可实现对内核的调试2.内核内存分配函数&#xff1a;top&…

【arduino】库的安装方法

arduino 库的安装方法 假设你已经安装好 Arduino IDE 以 OneButton 为例来介绍几种安装方法 文章目录 arduino 库的安装方法方法一&#xff1a;直接安装法方法二&#xff1a;导入 .ZIP库方法三&#xff1a;将库文件夹直接复制到贡献库路径下方法四&#xff1a;将库文件夹直接…

【项目部署】手把手带你从零部署项目:宝塔 + uwsgi + Django + 腾讯云 + Websocket

1. 前言 哈喽&#xff0c;大家好&#xff0c;我是jiaoxingk。今天带来的是有关Django项目部署的教程。 当我们完成了一个项目作品之后&#xff0c;我们肯定会迫不及待的就准备上线部署啦&#xff0c; 这篇教程将带你从服务器的配置选购&#xff0c;再通过安装宝塔的形式进行项目…

【notes2】并发,IO,内存

文章目录 1.线程/协程/异步&#xff1a;并发对应硬件资源是cpu&#xff0c;线程是操作系统如何利用cpu资源的一种抽象2.并发&#xff1a;cpu&#xff0c;线程2.1 可见性&#xff1a;volatile2.2 原子性&#xff08;读写原子&#xff09;&#xff1a;AtomicInteger/synchronized…

mac电脑如何安装python及环境搭建

&#xff08;1&#xff09;进入官网&#xff1a;Download Python | Python.org&#xff0c;根据自己电脑选择python (2)这里我选择的是mac,点击&#xff1a;macos&#xff0c;选择最近版本并点击进入 (3)选择mac版本&#xff1a; (4)点击就可以进入下载&#xff1a; (5)下载好之…

我独自升级崛起加速器推荐 用什么加速器好用 免费加速器推荐

新韩漫公司所发布的这项动作游戏已向玩家们敞开大门&#xff0c;为大家带来了前所未有的游戏体验和乐趣。这个游戏内包含了大量令人着迷的故事、令人印象深刻的战斗场景以及丰富多样的娱乐元素。在这其中最为引人注目的一点就是游戏内容中融入了“虚拟角色”的元素&#xff0c;…

大模型争霸的下一站:不仅是超越GPT-4,更是寻求模型之间的平衡应用

文 | 智能相对论 作者 | 沈浪 知名科学杂志《Nature》发表了一篇关于大模型规模参数大小争议的文章《In Al, is bigger always better?》——AI大模型&#xff0c;越大越好吗&#xff1f;随着大模型应用走向实践&#xff0c;这一问题不可避免地成为了当前AI行业发展的焦点与…

轻松上手的LangChain学习说明书

一、Langchain是什么&#xff1f; 如今各类AI模型层出不穷&#xff0c;百花齐放&#xff0c;大佬们开发的速度永远遥遥领先于学习者的学习速度。。为了解放生产力&#xff0c;不让应用层开发人员受限于各语言模型的生产部署中…LangChain横空出世界。 Langchain可以说是现阶段…

Chrome浏览器命令行妙用:使你的网上冲浪更加无障碍

引言 在当今数字化时代&#xff0c;网络浏览器已成为我们日常生活中不可或缺的工具之一。对于许多人来说&#xff0c;Google Chrome浏览器是首选&#xff0c;不仅因为它的普及度&#xff0c;更因为它提供的丰富功能和高度的可定制性。在Chrome的众多特性中&#xff0c;命令行功…