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

news2024/11/24 10:43:34

目录

      • 表达式
      • 数据类型转换
        • 自动转换
        • 强制转换
      • 运算符
        • 数学运算符
        • 自增自减运算符
          • 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.coloradmin.cn/o/1591721.html

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

相关文章

二叉搜索树--搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m * n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,…

基于springboot实现桂林旅游景点导游平台管理系统【项目源码+论文说明】计算机毕业设计

基于springboot实现桂林旅游景点导游平台管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了桂林旅游景点导游平台的开发全过程。通过分析桂林旅游景点导游平台管理的不足&#xff0c;创建了一个计算…

洛谷P1109 学生分组

#先看题目 题目描述 有 n 组学生&#xff0c;给出初始时每组中的学生个数&#xff0c;再给出每组学生人数的上界 R 和下界 L (L≤R)&#xff0c;每次你可以在某组中选出一个学生把他安排到另外一组中&#xff0c;问最少要多少次才可以使 N 组学生的人数都在 [L,R] 中。 输入…

echarts坐标轴、轴线、刻度、刻度标签

坐标轴 x、y轴 x 轴和 y 轴都由轴线、刻度、刻度标签、轴标题四个部分组成。部分图表中还会有网格线来帮助查看和计算数据 普通的二维数据坐标系都有x轴和y轴&#xff0c;通常情况下&#xff0c;x轴显示在图表底部&#xff0c;y轴显示在左侧&#xff0c;一般配置如下&#xf…

[面向对象] 单例模式与工厂模式

单例模式 是一种创建模式&#xff0c;保证一个类只有一个实例&#xff0c;且提供访问实例的全局节点。 工厂模式 面向对象其中的三大原则&#xff1a; 单一职责&#xff1a;一个类只有一个职责&#xff08;Game类负责什么时候创建英雄机&#xff0c;而不需要知道创建英雄机要…

【Linux学习笔记】安卓运行C可执行文件No such file or directory

文章目录 开发环境运行失败现象解决办法方法一&#xff1a;使用静态库方法二&#xff1a;使用动态库创建lib查找依赖库复制需要注意的事情 开发环境 开发板&#xff1a;正点原子RK3568开发板安卓版本&#xff1a;11可执行程序命名&#xff1a;ledApp需加载模块&#xff1a;dts…

npm命令卡在reify:eslint: timing reifyNode:node_modules/webpack Completed in 475ms不动

1.现象 执行npm install命令时&#xff0c;没有报错&#xff0c;卡在reify:eslint: timing reifyNode:node_modules/webpack Completed in 475ms不动 2.解决办法 &#xff08;1&#xff09;更换淘宝镜像源 原淘宝 npm 域名http://npm.taobao.org 和 http://registry.npm.ta…

Day 39:动态规划 LeedCode 62.不同路径 63. 不同路径 II

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#…

C语言:约瑟夫环问题详解

前言 哈喽&#xff0c;宝子们&#xff01;本期为大家带来一道C语言循环链表的经典算法题&#xff08;约瑟夫环&#xff09;。 目录 1.什么是约瑟夫环2.解决方案思路3.创建链表头结点4.创建循环链表5.删除链表6.完整代码实现 1.什么是约瑟夫环 据说著名历史学家Josephus有过以下…

Ribbon-负载均衡原理解析(案例)

简介&#xff1a;负载均衡&#xff0c;英文名称为Load Balance&#xff0c;其含义就是指将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行&#xff0c;例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等&#xff0c;从而协同…

MATLAB数据类型和运算符+矩阵创建

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍一、MATLAB数据类型和运算符&#x1f48e;1 MATLAB的数据类型&#x1f339;…

QT常用控件

常用控件 控件概述QWidget 核⼼属性核⼼属性概览enabledgeometrywindowTitlewindowIconwindowOpacitycursorfonttoolTipfocusPolicystyleSheet 按钮类控件Push ButtonRadio ButtionCheck Box 显⽰类控件LabelLCD NumberProgressBarCalendar Widget 输⼊类控件Line EditText Edi…

[尚硅谷 flink] 状态管理 笔记

文章目录 10.1 状态概述10.2 状态分类1&#xff09;托管状态&#xff08;Managed State&#xff09;和原始状态&#xff08;Raw State&#xff09;2&#xff09;算子状态&#xff08;Operator State&#xff09;和按键分区状态&#xff08;Keyed State&#xff09; 10.3 按键分…

【OTA】STM32-OTA升级——持续更新

【OTA】STM32-OTA升级——持续更新 文章目录 前言一、ymodem串口协议1、Ymodem 协议2、PC3、蓝牙4、WIFI云平台 二、UDS车载协议1.UDS协议 总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、ymodem串口协议 1、Ymodem 协议 STM32 Ymodem …

React 组件生命周期对比:Class vs. 函数式

在 React 中&#xff0c;Class 组件和函数式组件的生命周期存在一些差异。通过对 React 中 Class 组件和函数式组件的生命周期进行对比&#xff0c;详细探讨了它们在设计哲学、生命周期管理和开发技巧上的异同。全面了解 React 中两种组件类型的生命周期特点&#xff0c;以及如…

10个Python接私活平台,打破职场信息闭塞,告别死工资!

前言 Python是一种简单易学、高效强大的编程语言&#xff0c;正变成越来越多人选择的热门技能。不论你是否有编程基础&#xff0c;在学习Python的道路上&#xff0c;坚持每天投入2小时&#xff0c;你将看到巨大的回报。 学习Python不仅可以为你提供更多就业机会&#xff0c;还…

微信小程序 uniapp+vue.js医疗在线问诊挂号系统4oy17

预约挂号系统的逐渐发展&#xff0c;进一步方便了广大用户&#xff0c;使其可以更方便、快捷地预约挂号&#xff0c;并且也有效地防止号贩子“倒号”&#xff0c;使用户预约挂号更公平&#xff0c;然而现有预约挂号系统或多或少有所欠缺 小程序前端框架&#xff1a;uniapp 小程…

【问题解决】ubuntu安装新版vscode报code-insiders相关错误

问题 目前 vscode官网 最新的包为 insiders_1.89.0-1712297812_amd64.deb &#xff0c;双击或者使用sudo dpkg -i code-insiders_1.89.0-1712297812_amd64.deb安装后报错&#xff0c;执行其他命令也报错。 安装环境&#xff1a;ubuntu18.04 dpkg: 处理软件包 code-insiders (…

现在租一个服务器多少一个月啊?

现在租一个服务器多少一个月&#xff1f;优惠价格低至3.8元1个月&#xff0c;租用一个月云服务器收费价格表&#xff1a;阿里云和腾讯云2核2G3M服务器优惠价格61元一年&#xff0c;折合一个月5元&#xff0c;京东云轻量云主机5.8元一个月&#xff0c;华为云服务器优惠价格3.8元…

同态加密:重塑数据隐私与安全的未来

同态加密技术是当今信息安全领域的一个重要研究方向&#xff0c;它允许在加密数据上直接进行计算&#xff0c;而无需将数据解密。这种加密方式对于保护数据隐私和增强云计算安全具有重要意义。在这篇文章中&#xff0c;我们将深入探讨同态加密的基本概念、技术特点、应用场景以…