java 正负号数值比较_从零学java笔录-第10篇 数据类型(四)
从零学java笔录-第10篇 数据类型(四)
凯哥Java 凯哥java
本文是《凯哥陪你学系列之java基础篇》
感谢:
感谢网友:志远162。在上一篇中对错误指出。
在上篇中模运算正负号和分子保持一致而不是分母。希望大家记住
本篇主要内容:
1:比较运算
2:逻辑运算
3:位运算
4:三元运算
1: 比较运算:
比较运算符:等于,不等于,大于,大于等于,小于,小于等于。
在java中比较两个数等于使用的是双等号。比如 3==2
注意:比较运算符运算的结果是true或是false。
其中 instanceof这个先不用管。这个以后学习中需要的
2 逻辑运算符
Java中逻辑运算
逻辑运算符的作用:
用于连接两个boolean类型的表达式。
比如在数学中我们 2
但是 如果写出 x>2,x<5 这两个表达式和 2
所以就出现了逻辑运算符。
那么用java表达 x>2 其 x<5怎么表达?
(x>2 & x<5)这样就OK了。
代码演示:
class LogicDemo{
public static void main (String [] args){
int a = 3;
int b = 6;
System.out.println(a>2&a<5);
System.out.println(b>2&b<5);
}
}
运行结果:
分析原因:
System.out.println(a>2&a<5);为什么是true?
因为: a=3.而3>2.&符号左边是true 。又因为 3<5 .&符号右边是true.
所以&符号左右两边都是true。所以就是true.
System.out.println(b>2&b<5);为什么是false?
因为: b=6.而6>2.&符号左边是true 。而右边 6<5是false.
所以&符号左右两边就是 true和false。而输出的是false.
所以我们可以总结出&符号的特点
总结与(&):
&:与 或是叫 且。而且的意思
总结与(&):
&:与 或是叫 且。而且的意思
文字表达:
true & true = true;
true & false = false;
false & true = false;
false & false = false;
规律:
&符号:两边只要有一边是false结果必为false.
只有两边都是true,结果才是true。
总结与(|)
l:与、或者。就是或者的意思
文字表达:
true & true = true;
true & false = true;
false & true = true;
false & false = true;
规律:
|符号:两边只要有一边是true结果必为tr.ue
只有两边都是false,结果才是false。
与和或使用场景
当要取中间值或是数据(也就是区间值)的时候使用 & 。
比如 想要3 和4 那么就是 2
当要取不是区间值,使用或
比如 想要不是 3和4 那么就是 x<2 | x>5。取小于2或者是大于5的数
总结异或(^)
异或:
true & true = false;
true & false = true;
false & true = true;
false & false = true;
^和|的区别:
或是 两边都是真的时候结果依然为真
但是异或,两边都是真的时候 结果却为false.
总结非运算(!)
非运算取相反的值。
!ture = false;
!false = true;
短路逻辑运算:(面试题)
&& 双与其特点和单个&特点相同的。
但是只要有一边为假就不比较另一边了。
比如:int i = 1;
i>2 && i<5;
这个运算过程就是,先比较 1>2 结果是false.当使用&& 的时候就不在比较右边了。
但是如果使用& 还需要比较右边。所以&& 起到短路效果。
|| 和 |的效果是一样。但是||起到短路效果的。
为什么会出现 &&或是是||?
因为这个从效率上来讲比单&效率高。
&&和&区别:
&& 只能做逻辑运算符,起到短路效果。
& 不仅是逻辑运算符还是位运算符。
&:无论左边结果是什么,右边都参与运算。
&&:当左边是false时候,右边就不参与运算了。
||和|
|:无论左边结果是什么,右边都参与运算
||:如果左边是真,右边不参与运算。
|:还是位运算的
位运算符
Java中位运算符:
与运算:
6&3.
因为位运算直接对应的是二进制。
而我们知道6和3是int类型。而int类型在内存中是4个字节。32位二进制。
所以,6&3在内存中:
简写:
分析为什么 6&3 结果是十进制的2
0:false
1:true
而我们有知道&运算的特点。只要有一个为false结果必为false.
所以运算的结果就是二进制的010 对应的十进制就是2
同理 6|3 = 7
异或运算:
根据异或特点:两边相同即为假,两边不同才为真。
所以 6^3 = 5
6^3^3=6
所以,异或特点:
当一个数异或两一个数两次后,结果还是这个数本身。
异或作用:
作为加密的一种方式。
比如数字6 先用3异或一次后得到新的二进制。然后在网络上传输。等接受方拿到异或后的新二进制在和3进行异或后,就得到原来的数据6了。
反码:
其实就是取反后的二进制码
6的反码(~6): 是-7
理解:
反码就是取反后在加1.
左移:
3>>2:含义 3左移两位:
在内存中处理过程:
3在内存中完整的表示方式:
说明:两边的||表示在内存中临界边。
左移两位
得到新的二进制就是1100 转成十进制就是12
那么3<<3 = 24
分析原因:
因为这里操作的是二进制。所以左移一位就是2的1次方。左移3位就是2(3)
所以 :
总结:
左移N位其实就是该数乘以2的N次幂
所以 <
右移:
6>>1 =
6在内存中二进制:
右移一位:
右移一位后,最高位就空出一位。注意这里不能直接用0补。
如果是整数,使用0补,如果是负数使用1补。
也就是:原数据最高位是什么,右移后,最高位和原数据最高位相同。
对应二进制变成110对应的十进制就是3.
6>>2=1
找规律:
右移N位,其实就是该数除以2的N次幂
无符号右移:>>>
无符号右移与右移区别:
无符号右移,无论原数据最高位是什么,右移完成后最高位都用0补。
注意:
左移和右移,都操作的是二进制数据。
位运算练习:
练习1:
最优效率的方式算出2乘以8等于几?
内存中运算过程
分析得到 8=2(3).8等于2的3次方
所以 28 = 22(3)
2在内存中二进制表现:
2(3):2的3次方其实就是2左移3位。即时:2<<3
2的二进制左移三位后:
后面不够用0补全。
结果
有效的就是10000对应的十进制就是16。
所以代码:
练习2:
对两个整数变量的值进行互换(注意:不需要第三方变量)
分析:
正常的,使用第三方变量互换原理。
题目明确不能使用第三方变量。
方式1:
int a = 3,b = 5;
分析:
a = a+b; //此时a = 8
b = a-b;//此时b = 8-5 = 3
a = a – b;//因为在上一步 b = 3 所以此时 a = 8-3 = 5.
这样输出的 a = 5,b=3.a 和 b就互换了。
虽然使用这种方式也可实现a与b的互换。但是如果a和b都比较大
那么 a+b就有可能超出int范围。这样就会出现类型强制转换或是精度丢失的错误。
方案二:
使用异或运算。
从上面讲解我们知道 一个数异或另一个数两次之后,结果还是这个数的本身。
所以:
分析原因:
a = a^b; //这个没什么说的 此时a = a^b了
b = a^b; //这个时候因为上一步 a= a^b了。此时 b = ((a^b)^b)。其实 b = a
a = a^b; //有第一步 a = a^b ,有第二步 b = a。所以此时 a =( (a^b)^a).其实就是 a =b
将a b数据带入:
三元运算符
三元运算符(三目运算):三个元素参与运算的符号。
代码:
练习:
需求:比较两个整数,输出其中交大的
代码:
/**
三元运算符练习:
需求:
比较两个整数,输出其中交大的
**/
class OperatTest{
public static void main (String [] args){
int a = 5;
int b = 3;
System.out.println("a,b中较大的值为:"+ (a>b?a:b));
}
}
输出结果为:
练习二:
需求:求三个整数中较大的。
代码(部分):
//求三个整数中较大的。
int o =3,p =6,q = 1;
int temp = (o>p?o:p);
int max = temp>q?temp:q;
System.out.println("三个数中较大的值为:"+ max);
结果:
ps:欢迎关注凯哥微信公众号:凯哥Java
java 正负号数值比较_从零学java笔录-第10篇 数据类型(四)相关推荐
- java 十 = 0_从零学java笔录-第10篇 数据类型(四)
本文是<凯哥陪你学系列之java基础篇> 感谢: 感谢网友:志远162.在上一篇中对错误指出. 在上篇中模运算正负号和分子保持一致而不是分母.希望大家记住 本篇主要内容: 1:比较运算 2 ...
- java c++ python哪个好_程序员学java好还是python语言好 c++又如何
技术程序员学Java.C++.Python... 分析对比,到底学什么语言吃香,哪种语言最靠谱,如何学好这些语言呢? 几天前,我们在知识上看到这样一个问题:"java,C++,Python, ...
- java 后端开发好吗_后端开发学Java好还是学c++好呢?
C++与 java 的抉择 为了找工作:选Java. 为挑战自我:选C++. 很多人都说会C++就能会快掌握Jave.C++是不好学,但是我告诉你java也不好学.C++难是难在语言本身,java难是 ...
- java tomcat 读取配置文件端口_跟我学Java编程—应用读写项目配置文件的Properties类...
我们在开发软件项目时,经常需要读取项目的一些配置数据.例如,项目里用到的数据库链接地址.Tomcat服务端口号.数据文件备份地址等信息都需要放到一个配置文件里,由程序读取并获取.这样做的好处是,当需要 ...
- 零学Java(7)之数据类型,小AD竟然solo不过小朋友
作者简介 本文章为转载,原作者名:编程界明世隐,仅用来学习 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢 ...
- 从零学Java(2)之搭建开发环境
目录 从零学Java(8)之变量 从零学Java(7)之数据类型 从零学Java(6)之字面量和常量 从零学Java(5)之关键字和保留字 从零学Java(4)之编程规范 从零学Java(3)之第一个 ...
- 从零学Java(9)之修饰符,小AD竟打起了钱的主意!
作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...
- 从零学Java(3)之第一个实例HelloWorld
作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...
- 从零学Java(11)之算术运算符(加减乘除余、字符连接)
作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...
最新文章
- mysql min函数 结果全为null_MySQL ----- 聚集函数(AVG,SUM,COUNT,MIN,MAX) (十一)
- There was a problem importing one of the Python modules required to run yum
- mysql中创建唯一索引的关键字_mysql中唯一索引的关键字是什么
- createprocess失败代码2_pytest文档57单元测试代码覆盖率(pytestcov)
- uni-app开发规范
- AcWing1081.度的数量(数位DP)题解
- python面对对象实验_实验题目:python面向对象程序设计
- Google 投资了京东
- 面向过程与面向对象代码实例对比
- 锤子发布会2018的四个环节概述
- SSM整合尚硅谷Spring
- oracle rac 部署方案,RAC基础设施部署方案
- Tiptop CR报表axcr700采购入库月报增加tlf99“多角贸易序号”,部分资料无数据修复4gl文件bug
- 海康摄像头4G内网连接方案
- PHP+MYSQL实现个人博客网站,PHP动态网页设计
- Oracle_1th_查询语句
- 腾讯优图贾佳亚:当AI进入产业应用时代时,计算机视觉技术更应该服务于人才对!...
- 【Shell】Shell脚本(for循环,while循环,break跳出循环,continue结束本次循环)
- 灰帽子python 读书笔记 1
- Unity 运行状态下动态保存 预制体/预制体上脚本参数
热门文章
- 《机器学习》西瓜书课后习题9.4——python实现K-means算法
- jquery 获取鼠标点击的位置坐标
- CSS---background属性及其属性值
- dllhost.exe进程
- JAVA计算机毕业设计医患服务管理Mybatis+源码+数据库+lw文档+系统+调试部署
- 华为Freebuds Pro 2按捏没反应,触控失灵解决方法
- PDFMaker文件遗失怎么办,Word不能转PDF文件
- 如何给html创建关联,【经验分享】如何给制作的关联营销模板加上产品链接
- 教子要过计算机考试吗,男子自办私塾教子 15岁儿子高考过二本线
- 第五十七章 SQL函数 $FIND