表达式运算符位运算

表达式

概念:

  • 由常量、变量、运算符、()组成一句代码。
  • 代码最终有一个结果。
// 定义: 由常量、变量、运算符、()组成。由一个结果// 规律1: 当表达式中所有的变量类型小于等于int( int short byte char )的时候,运算后的结果都会自动提升为int类型。byte a = 10;short b = 20;int c = 30;int result = a + b + c;int result1 = 3 / 2; // 1// 当表达式中有变量类型大于等于int(float double)的时候,运算后的结果以表达式中精度最高的为主。// int + float = float    int + double = double   float + float = floatfloat result2 = 3 / 2.0f;

运算符

算术运算符
符号说明
+加法
-减法
*乘法
/除法。 整数相除得整数,小数相除得小数(double)
%模,取余数部分(除二取余)

当然,运算符中也会有优先级:
乘除取余 > 加减
我们也可用()去改变优先级。
+不止可以用于算术运算:

  • 数字运算
  • 字符串拼接: 一定要有字符得参与
自增&自减

格式:
变量++ -> 后自加 i++
++变量 -> 前自加 ++i
变量-- -> 后自减 i–
–变量 -> 前自减 --i
自增和自减都只变化1

单独使用
int i = 10;/** 1.单独使用,自成一句;* */i++; // i自增了1   你可以理解为:i = i + 1System.out.println(i); // 11i--;System.out.println(i); // 10++i;System.out.println(i); // 11--i;System.out.println(i); // 10

单独使用得情况下,前后位置没啥区别。反正经过了那句代码之后,变量变化1

复合使用(略微难)

输出的情况:
后自加:先输出,后自加

 int i = 10;/*2. 复合使用: 输出语句中, 赋值语句(参与计算)*/// 先使用,再变化System.out.println(i++); // 输出10System.out.println(i); // 11// 先变化,再输出System.out.println(++i); // 12System.out.println(i); // 12

赋值的情况:

        int i = 10;// 先赋值, 后变化int j = i++;System.out.println(j); // 10System.out.println(i); // 11 

先赋值,然后再变化。相当于把变化之前的值给到j

int i = 10;// 先变化,后赋值int j = ++i;System.out.println(j); // 11System.out.println(i); // 11

先变化,再赋值。相当于把变化后的值给到j

int i = 10;// 先用i,然后变化int j =i++ + 1;System.out.println(j); // 11System.out.println(i); // 11int i = 10;// 先用i,然后变化int j =++i + 1;System.out.println(j); // 12System.out.println(i); // 11int i = 10;// 先用i,然后变化int j =++i + ++i; // 23// int j = i++ + i++; // 21// int j = i++ + ++i;// int j = ++i + --i;// int j = ++i + --i;System.out.println(j); // 23System.out.println(i); //
i++与i = i + 1的区别
  • i++ java帮你自动强转
  • i = i + 1 有时需要你自动强转
byte i = 1;
i = (byte)(i + 1);
i++和++i的区别
y = i++// 则有
y = i;
i = i + 1;y = i--;
// 则有
i = i + 1;
y = i;

两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值。
当然还有一些区别,后面提。

赋值运算符

基本的赋值运算符:
=
复合运算符:

  • +=
  • -=
  • *=
  • /=
  • %=
// 1. 基本赋值运算符int a = 10;// 2. 复合赋值运算符: +=a%=5;System.out.println(a);

那么设计到了一个问题,a = a +5我们可以写成a+=5,会有什么问题呢?

  • a+=5java会自动帮你强转(精度丢失、数据溢出)
  • a = a + 5需要你手动强转
byte a = 10;
a = (byte)(a + 1);
比较运算符(关系运算符)

作用:

  • 条件判断的时候需要

种类:

符号说明
==如果符号前后相等为true;否则为false
>如果符号前的数据大于符号后的数据为true,否则为false
<如果符号前的数据小于符号后的数据为true,否则为false
>=如果符号前的数据大于或者等于符号后的数据为true,否则为false
<=如果符号前的数据小于或者等于符号后的数据为true,否则为false
!=如果符号前后不相等为true;否则为false
int a = 65;
int b = 12;
char c = 'A';boolean res1 = a > b;
System.out.println(res1);
System.out.println(a <= b);
// 现在,尽量同类型比。
// 原理: c字符转成ascii码,然后进行比较
System.out.println(a == c);
System.out.println(a == b);
System.out.println(a != b);
三目运算符(元运算符)

语法:关系表达式 ? true对应的结果 : false对应的结果
例子:

10 > 9 ? 'A' : 'B'10 < 5 ? 10 : 'A'
逻辑运算符

基本使用

符号说明
&&(与,并且)有假则假,符号前后有一个结果为false,整体就是false
||(或者)有真则真,符号前后有一个结果为true,整体就是true
!(非,取反)不是true,就是false;不是false,就是true
^(异或)符号前后结果一样为false;
不一样为true
true^true -> false
true^false -> true
false^true -> true
false^false -> false

优先级: ! > &&(&) > ||(|)
&&与&、||与|的区别

符号说明
&1.单与,如果前后都是布尔型,有假则假,但是如果符号前为false,符号后的判断会继续执行
2.如果该符号前后都是数字,看做是位运算符
&&1.双与,有假则假,但是有短路效果,如果符号前为false,符号后的判断就不会执行了
|1.单或,如果前后都是布尔型,有真则真,但是如果符号前为true,符号后的判断会继续执行
2.如果该符号前后都是数字,看做是位运算符
||1.双或,有真则真,但是有短路效果,如果符号前为true,符号后的判断就不会执行了

位运算

开发基本不用

  • 符号的介绍:
    • &(与) -> 有假则假
    • |(或) -> 有真则真
    • ~(非) -> 取反
    • ^(异或) -> 符号前后结果一样为false,不一样为true
      •  true ^ true -> false
        
      •  false ^ false -> false
        
      •  true ^ false -> true
        
      •  false ^ true -> true
        
  • 1代表true 0代表false
  • 计算机在存储数据的时候都是存储的数据的补码,计算也是用的数据的补码,但是我们最终看到的结果是原码换算出来的

原码 反码 补码

  • 正数二进制最高位为0; 负数二进制最高位为1

  • 如果是正数 原码 反码 补码 一致

      比如:5的原码  反码  补码一致:
    0000 0000 0000 0000 0000 0000 0000 0101 -> 因为是正数,二进制最高位为0如果是负数,原码 反码 补码不一样了反码是原码的基础上最高位不变,剩下的0和1互换补码是在反码的基础上+1
    

    比如:-9
    原码: 1000 0000 0000 0000 0000 0000 0000 1001
    反码: 1111 1111 1111 1111 1111 1111 1111 0110
    补码: 1111 1111 1111 1111 1111 1111 1111 0111
    左右移动:
    <<(左移),>>(右移)
    皆属于位运算符.其运算比乘除快
    <<表示左移,不分正负数,低位补0
    规则则是带符号位移,高位移出,低位补0。

表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

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

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

相关文章

Linux0.11 中全局描述符表(GDT)

在Linux内核中&#xff0c;全局描述符表&#xff08;Global Descriptor Table&#xff0c;简称GDT&#xff09;是一个关键的数据结构&#xff0c;主要用于管理处理器的内存段和相关的权限与属性。它属于x86架构中的保护模式特性&#xff0c;允许操作系统对内存访问进行更精细的…

深度学习技术之卷积神经网络

深度学习技术 卷积神经网络1. 导入需要的库2. 加载并显示两张图像2.1 加载图像2.2 创建子图2.3 打印图像形状2.4 打印合并后的图像数组的形状 3. 卷积层3.1 定义变量3.1.1 卷积核的大小&#xff08;u&#xff09;3.1.2 滑动步长&#xff08;s&#xff09;3.1.3 输出特征图的数量…

你了解 pom.xml 吗

你了解pomxml吗 springboot 是 java 利器&#xff0c;几乎每个写 java 的同学都会用&#xff0c;但是你了解 pom.xml 吗&#xff1f; 这篇干货查漏补缺。 首先我们创建个 springboot 项目 都选了默认设置&#xff1a; 我把这篇完整粘贴出来 pom.xml <?xml version&quo…

键盘控制小蛇移动

/*** Description 键盘控制小蛇移动*/ package com.ai.snake;import javax.swing.*;public class StartGame {public static void main(String[] args) {JFrame frame new JFrame();frame.setBounds(10,10,900,720);frame.setResizable(false); //窗口大小不可变frame.setDef…

Termius mac:一站式跨平台终端工具

Termius mac 8.4是一款远程访问和管理工具&#xff0c;旨在帮助用户轻松地远程连接到各种服务器和设备。它适用于多种操作系统&#xff0c;包括Windows、macOS、Linux和移动设备。 该软件提供了一个直观的界面&#xff0c;使用户可以通过SSH、Telnet和Mosh等协议连接到远程设备…

Linux 通过关键字查找文件

按文件名查找 find 路径 -name “文件名” 查找当前目录下的所有mk文件 find . -name "*.mk"按关键字查找 find 路径 -name “文件名” | xargs grep -n “关键字” 参数&#xff1a; xargs 是给命令传递参数的一个过滤器&#xff0c;也是组合多个命令的一个工具 -n…

【挑战全网】最全高德地图充电桩接入指南,流量必火!

分享《一套免费开源充电桩物联网系统&#xff0c;是可以立马拿去商用的&#xff01;》 一、和高德直接互联互通的优势&#xff1a; 1、高德官方直接互联互通&#xff0c;提供给合作商户独立发展自主权&#xff0c;不依赖任何第三方平台; 2、自己控制电站的上线、下线、修改电…

Redis教程(八):Redis中zSet类型的常用命令

zSet操作&#xff1a; 往zSet有序集合中添加数据&#xff0c;1&#xff0c;2&#xff0c;3代表权重&#xff0c;one&#xff0c;two&#xff0c;three代表数据 zadd myzset 1 one 2 two 3 three 查询zSet中所有的值&#xff0c;第一个参数为0代表从小到大排序&#xff0c;为…

MemoryModule - 应用编程细节

文章目录 MemoryModule - 应用编程细节概述笔记实验环境升级MemoryModule&#xff0c;在上下文中加入DLL在内存载入前的信息MemoryModule.hMemoryModule.cpp实现接口MemoryGetPayload() 整理 - 在内存载入的DLL中&#xff0c;取得资源表中的信息&#xff0c;取得载入前的DLL内容…

从0开始理解云原生架构

一、云原生发展历史 云原生概念最早起源于2013年&#xff0c;由 Matt Stine 首次提出“Cloud Native”这一术语&#xff0c;这个概念强调了应用需要充分利用云的优势&#xff0c;如弹性、可扩展性和服务化。2015年&#xff0c;Matt Stine出版了《迁移到云原生架构》一书&am…

ChatGPT官网5月14日凌晨1点发布会推出最新GPT4o大模型,贾维斯时刻要来了?

就在今天北京时间2024年5月14日凌晨1点中&#xff0c;OpenAI进行了发布会&#xff0c;这次发布会的内容炸裂&#xff0c;一起来看下吧&#xff01; GPT4o多模态大模型发布 首先公开的是GPT4o多模态大模型的发布&#xff0c;相较于GPT-4turbo速度更快&#xff0c;更便宜。我刚开…

水离子雾化壁炉与会所的氛围搭配

水离子雾化壁炉在会所的氛围搭配可以营造出舒适、现代和高雅的氛围&#xff0c;以下是一些搭配建议&#xff1a; 豪华会所装饰&#xff1a; 将水离子雾化壁炉作为会所豪华装饰的一部分&#xff0c;放置在会所的核心区域或休息区域。选择适合会所风格的壁炉款式&#xff0c;如…

echarts的柱状图使用

1. 柱状图&#xff08;柱体顶部使用外部图片 相关代码 <template><div class"out-bg"><div class"container" ref"warnChartRef"></div></div> </template><script> import * as echarts from echar…

短视频矩阵系统/源码----可视化剪辑技术独家开发

现阶段市面上大多矩阵软件都非常程序化且需要使用者具有较强的逻辑思维能力或剪辑经验&#xff0c;这使得一些个人、团队、企业在使用时无形中增加了学习成本&#xff0c;剪辑出来的效果大多不尽如人意&#xff0c;发出来的视频没有流量&#xff0c;根本达不到预期效果。 如何提…

绘制奇迹:Processing中的动态图形与动画

&#x1f680; 欢迎回到Processing的世界&#xff0c;你的艺术编程航程刚刚开始。在我们的入门篇中&#xff0c;你已经学会了如何用Processing绘制基本的静态图形。现在&#xff0c;让我们一起探索Processing强大的动态图形和动画功能&#xff0c;释放你的创造力&#xff0c;走…

59.基于SSM实现的网上花店系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;网上花店是在MySQL中建立数据表保存信息&#xff0c;运用SSMVue框架和Java语言编写。并按照软件设计开发流程进行设计实现充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SSM的网…

微信小程序的Vant Weapp组件库 与 weui组件库 的区别?

微信小程序中的Vant Weapp组件库和WeUI组件库是不一样的。虽然它们都提供了丰富的组件和样式&#xff0c;用于帮助开发者快速构建出具有现代感和一致性的小程序界面&#xff0c;但它们在来源、设计理念和组件构成上有所不同。 一、Vant Weapp组件库 &#xff08;1&#xff09…

GSCoolink GSV6125 替LT6711A HDMI2.0转Type-C/DP1.4

GSCoolink GSV6125 在 Type C/Dp monitor&#xff0c;线材&#xff0c;VR/AR&#xff0c;系统均有大量的应用机会&#xff0c;且目前只有龙迅LT6711A 竞争对手。 Gscoolink GSV6125是一款高性能、低功耗的HDMI 2.0转Type-C/DP1.4转换器。通过集成增强型微控制器&#xff0c;GS…

运营商二次放号查询接口如何对接

运营商二次放号查询接口又叫手机二次放号检测接口&#xff0c;指的是输入手机号和日期&#xff0c;查看在该日期之前是不是二次放号。那么运营商二次放号查询接口如何对接呢&#xff1f; 这边我找到了一家叫数脉API的公司&#xff0c;他们刚好有这个接口&#xff0c;首先注册账…

python判断成绩是否优秀

def evaluate_grade(score): if not isinstance(score, (int, float)): raise ValueError("输入的成绩必须是整数或浮点数") if score < 0 or score > 100: raise ValueError("输入的成绩必须在0到100之间") if score > 90: return "优…