B004-表达式 类型转换 运算符

目录

      • 表达式
      • 数据类型转换
        • 自动转换
        • 强制转换
      • 运算符
        • 数学运算符
        • 自增自减运算符
          • i++与 ++i的区别
        • 赋值运算符
        • 比较运算符
        • 位运算符(了解)
        • 逻辑运算符
        • 三目运算符

表达式

/**
 * 表达式定义:由常量 变量 运算符 括号组成的算式,为了按照一定的运算规则计算出结果值
 *  括号能提高运算的优先级 
 *  1.表达式结果可使用变量接收后用变量打印,也可使用表达式直接打印
 *  2.只要表达式中有一个是字符串结果就都是用字符串类型接收
 */
public class BDSDemo {
	public static void main(String[] args) {

		int a = 25;
		boolean b = true;
		// 表达式结果可直接打印
		System.out.println(a + 69 + "你们好" + b + (36 + 45));
		// 只要表达式中有一个是字符串结果就都是用字符串类型接收
		String s1 = a + 69 + "你们好" + b + (36 + 45);
		String s2 = a + 69 + "25" + b + (36 + 45);
	}
}

数据类型转换

类型转换定义:从一种数据类型转换为另外一种类型
作用:1.节约内存空间;2.转换成项目所需要的类型

基本数据类型排序
(boolean)、byte、char、short、int、long、float、double
char 只有正数范围 [0,2^16-1]

自动转换

在这里插入图片描述

/**
 *   自动转换:从小的类型转换大的类型
 *   1.布尔类型不参与转换
 *   2.byte与char之间不能自动转换,因为char只有正数范围    
 *     char与short之间不能自动转换,因为char正数范围比short大
 */
public class TypeTransform {

	public static void main(String[] args) {
		//1.如果运算式中元素类型分别属于(byte,short,char,int),那么运算前所有元素类型都将会自动转换为int类型再运算,结果也为int(自动向上转型)
		byte b = 25;
		short s = 26;
		char c = 'A';
		int i = b+s+c+69;
		System.out.println("i: "+i);
		byte b1 = 23;
		int r = b+b1;
		
		//2.long  float  double只要两个操作数中有一个为以上类型,另一个就会被转换成表达式中最大类型,并且结果也为该类型
		long  x = 36L;
		float y = 20.0F;
		float d = x+y;
		double t = x+y+3.14;
		float t1 = x+y+3.14F;
		double t2 = 69+x+y+b+c+s+2.0;
		
		//3.char类型向更高长度类型(例如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换
		char c1 = 'A';
		int t3 = c1+35;//根据ASCII码值为65  提升为int类型 
		System.out.println("t3: "+t3);
		
		//特例 从大到小(要在小的类型范围中) 
		byte b2 = 36;
		short s1 = 5798;
	}

}
强制转换
/**
 *   强制转换:从大的类型转换成小的类型     (是为了转换成自己或者项目所需要的的类型)
 *       语法:强转类型  变量名 = (强转类型)(值或者表达式)
 *       注意:都是已知转换不会出问题,如果是未知的强制转换就有可能出现精度损失
 */
public class TypeTransform2 {

	public static void main(String[] args) {
		byte b1 = 120;
		byte b2 = 3;
		//正常强制转换
		byte x1 = (byte)(b1+b2);
		System.out.println("x1: "+x1);
		 
		byte b3 = 120;
		byte b4 = 30;
		//出现精度损失的强制转换
		byte x2 = (byte)(b3+b4);
		System.out.println("x2: "+x2);
		 
		//byte与char不能自动转换  但是可以强转
		char c = 65;
		byte b5 = (byte)c;
		 
		int i1 = 123;
		int i2 = 456;
		//注意强转的时候强转的部分是否为一个整体
	    float d = (float)((i1 + i2) * 1.2);
	}

}

运算符

数学运算符
/**
  *  数学运算符:+(加)   -(减)   *(乘法)   /(除法)   %(取模  求余数)
  *     作用于常量或者变量
 */
public class _04MathSignDemo {

	public static void main(String[] args) {
		//加法
		System.out.println(2+50.0);
		//减法
		System.out.println(2-1);
		//乘法
		System.out.println(2*2);
		
		//除法
		System.out.println(2/2);
		//System.out.println(1/0);		//编译只看类型 不会进行运算 所以编译不会报错 运行会报错  因为0不能作为分母
		System.out.println(1.0/0);		//Infinity  0先提升为double类型  double类无限趋近于这个数字
		System.out.println(0.0/0);		//NaN  等同于无线趋近于0乘以无限大   not a number  不是一个数
		System.out.println(10/3);		//3   因为两个都是整数类型 结果也为整数类型 不会保留小数位
		
		//取模
		System.out.println(5%2);		//1
	}
}
自增自减运算符
/**
 * 自增运算符:++,只能作用于变量,使变量的值自动增加1
 * 自减运算符:--,只能作用于变量,使变量的值自动减少1
 */
public class _05AutoIncreDemo {

	public static void main(String[] args) {

		int i = 2;
		i++;
		System.out.println(i);	//3

		int j = 2;
		++j;
		System.out.println(j);	//3
		
		int x = 5;
		x--;
		System.out.println(x);	//4
		System.out.println(--x);//3
	}
}
i++与 ++i的区别
/**
 * 自增运算符:++,只能作用于变量,使变量的值自动增加1
 * i++与 ++i的区别:
 *    i++和++i本身是一个表达式,也具有值
 * 结论:
 *    i++表达式的值等于i自增之前的值,i本身的值也会+1
 *    ++i表达式的值等于i自增之后的值,i本身的值也会+1
 * 使用的时候 需要注意 到底是使用的是变量的值 还是自增表达式的值
 */
public class _06AutoIncreDemo2 {

	public static void main(String[] args) {

		int i = 2;
		System.out.println(i++);	// 2
		System.out.println("i=" + i);

		int j = 2;
		System.out.println(++j);	// 3
		System.out.println("j=" + j);
	}
}
public class Practice {
	public static void main(String[] args) {
		int i = 3;
		int a = i++ + i++ + i++;
		//      3     4     5     i=6
		int b = ++i + ++i + ++i;
		//       7     8     9    i=9
		System.out.println(i);	//9
		System.out.println( a);	//12
		System.out.println( b);	//24
	}
}
+号的特殊使用:
1.基本数据类型之间使用+号
	全部进行加法运算
2.基本数据类型和引用数据类型之间使用+号
	2.1如果基本数据类型先使用+号,那么进行加法运算,然后使用+号和字符串进行拼接
	2.2如果字符串和字符之间使用+号,那么字符不会转换成对应的数值,直接进行拼接		
3.引用数据类型和引用数据类型之间使用+号
	全部进行拼接
	如果字符串在最前面,那么后面的全部进行拼接
自增自减运算符符号:  ++    --
注意:  自增自减只能够用于变量,不能用于常量  
           自增自减运算的优先级比算术运算符高
要点:  把整个表达式看成是一个整体。
		  如果符号在变量名后面,那么整个表达式的值就是原来值不变。
		  如果符号在变量名前面,那么整个表达式的值就是原来的值加1。
赋值运算符
/**
  * 赋值运算:从右往左
 *  =  +=  -=  *=  /=  %=
 *  +=  -=  *=  /=  %= 会存在隐式的自动类型转换
 */
public class _08FZSignDemo {

	public static void main(String[] args) {

		int x = 6;

		x += 5;		//可以理解为x=x+5;
		System.out.println("x: "+x);	//11

		x -= 6;		//可以理解成x=x-6;
		System.out.println("x: "+x);	//5
		
		byte b1 = 2, b2 = 3;
		b1 = (byte) (b1 + b2);
		System.out.println(b1);

		b1 += b2;	//可以理解成为: b1=b1+b2,有一个隐式的自动类型转换

	}
}
比较运算符
/**
  * 比较运算符
 *  ==(相等)  !=(不等)  >  <  >=  <=
  *  用来两个常量或者变量或者两个表达式之间的比较
  *  比较运算的结果为布尔类型
 */
public class _09CompareDemo {

	public static void main(String[] args) {
		System.out.println(5>3);//true
		int a = 5 ,b = 6;
		System.out.println(a!=b);//true
		System.out.println(a++>b++);//false
		System.out.println(a==b);//false
	}
}
位运算符(了解)
/**
  * 位运算符(了解)
  * 主要用来进行二进制的运算,进行位运算之前,首先需要将数据转换为二进制以后再进行运算
    1. & : 与 位运算,两边为1,结果为1,不同时为1,则结果为0
	2. | : 或 位运算,有一个为1,结果为1
	3. ^ : 异或,两边不一样,就为1,否则为0
	4. ~ : 取反,1变成0,0 变成1    ~(-5)结果4
	5. <<:向左位移动,例如1<<3,   结果8         
	6. >>:向右位移动,例如8>>2     
	7. >>>:无符号向右移动
 */
public class _10BinSignDemo {

	public static void main(String[] args) {
		
		//&:先转为二进制去算,同时为1则为1,其他都为0
		System.out.println(2&3);	//结果为二进制的10,  10进制就为2
		/*  10
		 *  11
		 * ----
		 *  10
		 * */
	    //|:有一个为1 则为1 
		System.out.println(2|3);	//11=1*2^1+1*2^0=1+2=3
		//^:两边不一样才为1
	    System.out.println(2^3);	//01  -->1
	    //<<:往左移动3位,补0
	    System.out.println(1<<3);	//1000=1*2^3=8
	    //>>:往右移动3位
	    System.out.println(8>>3);	//1
	}
}
逻辑运算符
/**
  *  逻辑运算符:
  *    用来连接两个布尔类型的值或者表达式,运算的最终结果也为布尔类型
 *  &:与  两个表达式同时为true,则结果为true,否则结果为false
 *  |:或  只要有一个为true,则逻辑运算结果为true
 *  !: 取反
 *  ^:亦或  必须两个不同的时候  逻辑运算才true
 *  &&:短路与  两个表达式同时为true,则结果为true,第一个为false后面的就不用运行
 *  ||:短路或  只要有一个为true,逻辑运算结果为true,第一个为true后面的就不用运行
 */
public class _11LogicDemo {

	public static void main(String[] args) {
		System.out.println(true&true);	//true
		System.out.println(true&false);	//false
		System.out.println(true|false);	//true
		System.out.println(false|false);//false
		System.out.println(!true);		//false
		System.out.println(true^false);	//true
		System.out.println(false^false);//false
		System.out.println(true^true);	//false
		System.out.println(true&&true);	//true
		System.out.println(true&&false);//false
		System.out.println(true||true);	//true
		System.out.println(true||false);//true
	}
}
/**
 *  && 和 & 区别?
 *   &不具有短路功能,当第一部分为false的时候, 依然会执行第二部分的代码
 *   &&具有短路功能,当第一部分为false的时候,不会执行第二部分
 *  | 和 || 区别?
 *   |不具有短路功能,当第一部分为true时,依然会执行第二部分
 *   ||具有短路功能,当第一部分为true时,不会执行第二部分
 */
public class _12LogicDemo2 {

	public static void main(String[] args) {

		int x = 5;
		System.out.println(3>5 & x++>6);	//false
		System.out.println(x);	//6
		
		int y = 5;
		System.out.println(3>5 && y++>6);	//false
		System.out.println(y);	//5	
		
		int i = 4;
		System.out.println(5>3|i++>2);	//true
		System.out.println(i);	//5
		
		int j = 4;
		System.out.println(5>3||j++>2);	//true
		System.out.println(j);	//4
	}
}
三目运算符
/**
 * 三目运算符:由?和:分隔的三个表达式 
 * 语法:x?y:z, x:布尔类型的值或者表达式, y和z,一般来说为同种类型的变量 常量或者表达式
 * 运算流程:当x为true的时候,三目运算的结果为y,否则为z
 */
public class _13ThreeEyesDemo {

	public static void main(String[] args) {
		// 三目运算
		String s = false ? "真的" : "假的";
		System.out.println(s);
		// 不能使用变量接收 因为编译只看类型 不会运算
		System.out.println(false ? "真的" : 4);

// 		求出a和b两个整数中最大的整数
		int a = 69, b = 138;
		System.out.println(a > b ? a : b);

// 		求出 a,b,c 三个数中最小的数字
		// 两两比较 先找出两者中最小的 再将结果和第三个进行比较
		int x = 9, y = -6, z = -1;
		int t = x < y ? x : y;
		int min = t < z ? t : z;
		System.out.println(min);
		
//		例如小明学习java 考试成绩  >=60 显示 非常优秀   否则输出 还有很大的提升空间。
		// 定义一个变量 用来存放小明成绩
		int score = 99;
		String s2 = score >= 60 ? "非常优秀" : "还有很大提升空间";
		System.out.println(s2);
		
//		等级分   A B C D ,也是通过三目运算写出结果
		/*
		 * 90~100 A score>=90&&score<=100 
		 * 80~90 B score>=80&&score<90 
		 * 70~80 C score>=70&&score<80 
		 * 60~70 D score>=60&&score<70
		 */
		// 三木运算嵌套
		String s3 = score >= 90 && score <= 100 ? "A" : (score >= 80 && score < 90 ? "B" : (score >= 70 && score < 80 ? "C" : "D"));
		System.out.println(s3);
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML 入门 ( 一 )

HTML文档创建 首先创建一个txt文本文档 修改文件后缀 HTML标签 标签结构 标签又称为元素,是HTML的基本组成单位分为: 双标签与单标签推荐小写标签名 结构: 双标签示例代码: <marquee> My name is Kvein. </marquee>单标签示例代码: <input>标签的并列与嵌…

Autosar Dcm配置-手动配置RID及Routine功能实现-基于ETAS软件

文章目录 前言Routine介绍Routine配置DcmDsdDcmDspDcmDspRoutinesSWC配置总结前言 之前介绍了DID的配置,本文介绍UDS诊断中,另外一种常用的功能Routine的配置,及生成代码的使用。 Routine介绍 Routine一般用于ECU较复杂的控制功能。使用UDS服务ID为0x31 31后面跟的是子服…

【智能算法】智能算法空间搜索图GIF,探索开发对比图,动态展示理解更清晰~

目录 1.前文回顾2.空间搜索图3.探索开发对比图4.参考文献 1.前文回顾 前文已经提到智能算法统计指标&#xff0c;本文将进一步扩展算法空间搜索图GIF&#xff0c;探索开发对比图&#xff0c;动态展示理解更清晰&#xff1a; 【智能算法】省时方便&#xff0c;智能算法统计指标…

Python基于大数据的微博的舆论情感分析,微博评论情感分析可视化系统,附源码

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…

ExpressLRS硬件实测性能分析

ExpressLRS硬件实测性能分析 1. 源由2. 远航测试3. 实验室测试3.1 芯片RSSI与实测功率差异3.2 SNR信噪比稳定3.3 140db衰减器衰减&#xff0c;40个频点信号稳定 4. 外场测试4.1 无屏蔽样品4.2 有屏蔽样品4.3 有屏蔽vs无屏蔽样品 5. 估算6. 总结7. 补充说明 -- 50mW视频 1. 源由…

从0到1落地接口自动化测试(超详细)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前段时间写了一系列自动化测试相关的文章&#xff0c;当然更多的是方法和解决问题的思路角度去阐…

【AHK】显示画布\贴图周数\设置一个时钟显示周数

AHK没有直接显示画布的工具&#xff0c;但可以通过自定义GUI删去菜单栏显示。 具体逻辑&#xff0c;通过时间戳获取天数&#xff0c;然后再拿当前日期和开学日期作差&#xff0c;获取天数之后和数字7相除&#xff0c;再向下取整。 显示下过如图 ;先控制属性&#xff0c;下面依…

php:实现压缩文件上传、解压、文件更名、压缩包删除功能

效果图 1.上传文件 2.压缩包文件 3.itemno1文件 4.上传到系统路径\ItemNo 5.更名后的itemno1文件(命名&#xff1a;当天日期六位随机数) 代码 <form action"<?php echo htmlspecialchars($_SERVER[PHP_SELF], ENT_QUOTES, UTF-8); ?>" method"post…

机器人瓶胚检测工作站(H3U脉冲轴控制)

1、变量定义 2、程序监控1 2、 程序监控2 3、程序监控3 机器人输送料和机构的动作安全尤为重要&#xff0c;下面我们讨论下安全联锁控制逻辑 4、相机拍照触发信号 5、相机拍照触发时序

Harmony鸿蒙南向外设驱动开发-LCD

功能简介 LCD&#xff08;Liquid Crystal Display&#xff09;驱动编程&#xff0c;通过对显示器上电、初始化显示器驱动IC&#xff08;Integrated Circuit&#xff09;内部寄存器等操作&#xff0c;使其可以正常工作。 基于HDF&#xff08;Hardware Driver Foundation&#…

Axure学习:网站后台导航菜单的制作及对应内容的显示

​不少产品经理主要做的产品是后台系统&#xff0c;在做后台原型的时候对于有些部分的内容存在一些疑惑。 我们的学员也是一样&#xff0c;在做后台的时候遇到了一些问题&#xff0c;请教了老师&#xff0c;得到了解答。这里和大家分享一下&#xff0c;同学们的问题以及解决方…

找到冠军 II

题目&#xff1a; 一场比赛中共有 n 支队伍&#xff0c;按从 0 到 n - 1 编号。每支队伍也是 有向无环图&#xff08;DAG&#xff09; 上的一个节点。 给你一个整数 n 和一个下标从 0 开始、长度为 m 的二维整数数组 edges 表示这个有向无环图&#xff0c;其中 edges[i] [u…

SpringBoot碎片化知识

参考资料&#xff1a; java官方词典&#xff1a;https://docs.oracle.com/javase/tutorial/information/glossary.html#F苍穹外卖&#xff1a;https://www.bilibili.com/video/BV1TP411v7v6 JavaBean规范 JavaBean规范是一种类的规范&#xff0c;其要求符合下列条件&#xf…

跟着教程使用腾讯云服务器一步步搭建网站教程,收藏级

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网txyfwq.com整理使用腾讯云服务器建站教程&#xff0c;…

【vue】v-model.lazy等(非实时渲染)

v-model&#xff1a;实时渲染v-model.lazy&#xff1a;失去焦点/按回车后&#xff0c;才渲染v-model.number&#xff1a;值转换为数字v-model.trim&#xff1a;去除首尾空格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

「JavaEE」初识进程

初识进程 &#x1f349;进程&#x1f34c;操作系统的进程管理 &#x1f349;PCB 重要属性&#x1f34c;进程的身份标识&#x1f34c;内存指针&#x1f34c;文件描述符表&#x1f34c;进程的状态&#x1f34c;优先级&#x1f34c;记账信息&#x1f34c;上下文 &#x1f349;内存…

LongAdder和AtomicLong的对比实验

LongAdder 的核心思想是热点分离&#xff0c;与 ConcurrentHashMap 的设计思想类似&#xff1a;将value值分离成一个数组&#xff0c;当多线程访问时&#xff0c;通过Hash算法将线程映射到数组的一个元素进行操作&#xff1b;而获取最终的value结果时&#xff0c;则将数组的元素…

C++ 之 【类与对象】 从入门到精通一条龙服务 进阶篇(类的6个默认成员函数,构造,析构。。。)

以后把闹钟换成唢呐&#xff0c;醒了就起床&#xff0c;不醒就上天堂 一、类的6个默认成员函数 二、构造函数 1.概念 2.特性 三、析构函数 1.概念 2.特性 四、拷贝构造函数 1.概念 2.特征 五、赋值运算符重载 1.运算符重载 2.赋值运算符重载 3.前置和后置重载 六…

[大模型]Qwen1.5-7B-Chat FastApi 部署调用

Qwen1.5-7B-Chat FastApi 部署调用 环境准备 在 Autodl 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8&#xff08;11.3 版本以上的都可以&#xff09;。 接下来打开刚刚租用服务器的 Jupyt…

pom.xml显示灰色并被划线

在使用 IDEA 进行开发的过程中&#xff0c;有时候会遇到 pom.xml 显示灰色并被划线的情况&#xff0c;如下图&#xff1a; 这一般是因为该文件被 Maven 忽略导致的&#xff0c;可以进行如下操作恢复&#xff1a; 设置保存后&#xff0c;可以看到 pom.xml 恢复了正常&#xff1a…
最新文章