3-「季淳卿」 运算符+原码、反码、补码
算术运算符
开始下回分解
示范如下:
int a = 10;int b = 20;System.out.println("a == b = " + (a == b) );System.out.println("a != b = " + (a != b) );System.out.println("a > b = " + (a > b) );System.out.println("a < b = " + (a < b) );System.out.println("b >= a = " + (b >= a) );System.out.println("b <= a = " + (b <= a) );
结果如下:
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false
关系运算符
无法复制加载中的内容
示范如下:
int al = 10;
int bl = 20;
// == 两个变量相等 值为真
boolean cl = al==bl; // false
// != 两个变量不相等 值为真,否则为假
boolean c2 = al!=bl; // true
// 左边的变量是否大于右边的变量,大于值为真,否则为假
boolean c3 = al>bl; // false
// 左边的变量是否小于右边的变量,小于值为真,否则为假
boolean c4 = al<bl; // true
// 左边的变量是否大于等于右边的变量,大于等于值为真,否则为假
boolean c5 = al>=bl; // true
// 左边的变量是否小于等于右边的变量,小于等于值为真,否则为假
boolean c6 = al<=bl; // true
System.out.println(cl+"-"+c2); //false - true
System.out.println(c3+"-"+c4);
System.out.println(c5+"-"+c6);
位运算
无法复制加载中的内容
位运算这里稍微复杂一些,涉及到进制转换
原码、反码、补码
网上对原码、反码、补码的解释过于复杂,这里引用韩老师精简的几句话(这几点一定要背的滚瓜烂熟-基本功)
对于有符号的而言
- 二进制的最高位是符号位:0表示正数,1表示负数(口诀 0->0 , 1->-1)
- 正数的原码、反码、补码都一样(三码合一)
- 负数的反码 = 它的原码符号位不变,其他位取反(0->1 ,1->0)
- 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1
- 0的反码、补码都是0
- java没有无符号数,换文言之,java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的
- 当我们看运算结果的时候,要看它的原码(重点)
// 位运算 & | ^ ~
// 进制之间的转化
int x = 10;// 00001010
int y = 8;// 00001000
int xy = x&y;
过程如下:
无法复制加载中的内容
具体案例
案例一:c = x&y c的结果? (c = 100 & 50)
先试着自己推算出结果在查看具体的过程
int x = 100;
int y = 50;
/*** 1. c = x&y c的结果? (c = 100 & 50)*推导过程* 1. 得到 它的补码 => (要得到补码就要现有原码)* 100的原码 00000000 00000000 01100100 (正数三码合一)* 100的补码 00000000 00000000 01100100* 2. 50的原码 00000000 00000000 00110010 (正数三码合一)* 50的补码 00000000 00000000 00110010* 3. 按位 &* 00000000 00000000 01100100* 00000000 00000000 00110010* 00000000 00000000 00100000 & 运算后的补码* 运算后的原码是 00000000 00000000 00100000 (正数三码合一)* 结果是 32*/
int c = x&y;
System.out.println("1. c = x&y 中 c 的结果是:"+c); //32// >> 右移 将二进制位右移指定位数int move = 20 ;int ret = move >> 2;System.out.println(ret);//00000000 00000000 00010100 //20的二进制//00000000 00000000 0000 1010 // 向右引动一位//00000000 00000000 0000 0101 // 向右引动二位案例二:2. d = c|y d的结果? (c = 32 | y = 50)/*** 2. d = c|y d的结果? (c = 32 | y = 50)* 1. 得到 它的补码 => (要得到补码就先要有原码)* 32的原码 00000000 00000000 00100000 (正数三码合一)* 32的补码 00000000 00000000 00100000* 2. 50的原码 00000000 00000000 00110010 (正数三码合一)* 50的补码 00000000 00000000 00110010* 3. 位运算 |* 00000000 00000000 00100000* 00000000 00000000 00110010* 00000000 00000000 00110010 | 运算后的补码* 运算后的原码是 00000000 00000000 00110010 (正数三码合一)* 结果是 50*/
int d = c|y;
System.out.println("2. d = c|y 中 d 的结果是:"+d);//50
案例三:d = c^d d 的结果? (c=32 ^ d=50)
/*** 3. d = c^d d 的结果? (c=32 ^ d=50)* 1.得到 它的补码 => (要得到补码就先要有原码)* 32的原码 00000000 00000000 00100000 (正数三码合一)* 32的补码 00000000 00000000 00100000* 2. 50的原码 00000000 00000000 00110010 (正数三码合一)* 50的补码 00000000 00000000 00110010* 3. 位运算 ^* 00000000 00000000 00100000* 00000000 00000000 00110010* 00000000 00000000 00010010 ^ 运算后的补码* 运算后的原码是 00000000 00000000 00010010 (正数三码合一)* 结果是 18*/
// int c = 32;
// int d = 50;
// int g = c^d;
// System.out.println("3. d = c^d 中 d的结果是 "+g);//18
案例四:4. d = ~c d的结果? (c ~ 32)
/*** 4. d = ~c d的结果? (c ~ 32)* 1.得到 它的补码 => (要得到补码就先要有原码)* 32的原码 00000000 00000000 00100000 (正数三码合一)* 32的补码 00000000 00000000 00100000** 2. 按位 ~ 操作* 00000000 00000000 00100000* 11111111 11111111 11011111 ~ 运算后的补码 (由于是负数,需要算出原码)* 3. 运算后的反码 11111111 11111111 1101 1110 (负数反码 = 负数补码 - 1)* 4. 运算后的原码 10000000 00000000 00100001* 11100010*结果是 -33*/
// int c = 32;
// int d = ~c;
// System.out.println("4. d = ~c 中 d 的结果?"+ d );
案例五:5. cc = ((x&y) & (x|y)) cc的结果? (cc = ((100&50) & (100|50)))
此案例稍微复杂一些,没有什么难度,重点是细心,一个一个算出结果就好(粗中有细)
提示:主要是分成三部分运算
/*** 5. cc = ((x&y) & (x|y)) cc的结果? (cc = ((100&50) & (100|50)))* 一、 得到 100 & 50* 1. 得到 它的补码 => (要的到补码就要有原码)* 100的原码 00000000 00000000 01100100 (正数三码合一)* 100的补码 00000000 00000000 01100100* 2. 50的原码 00000000 00000000 00110010 (正数三码合一)* 50的补码 00000000 00000000 00110010* 3. 安位 & 操作* 00000000 00000000 01100100* 00000000 00000000 00110010* 00000000 00000000 00100000 & 运算后的补码* 4.运算后的原码是 00000000 00000000 00100000 (正数三码合一)* 结果是 32** 二、 得到 100 | 50* 1. 得到 它的补码 => (要的到补码就要有原码)* 100的原码 00000000 00000000 01100100 (正数三码合一)* 100的补码 00000000 00000000 01100100* 2. 50的原码 00000000 00000000 00110010 (正数三码合一)* 50的补码 00000000 00000000 00110010* 3. 安位 | 操作* 00000000 00000000 01100100* 00000000 00000000 00110010* 00000000 00000000 01110110 | 运算后的补码* 4.运算后的原码是 00000000 00000000 01110110* 结果是 118** 三、得到 32 & 118* 1. 得到 它的补码 => (要的到补码就要有原码)* 32的原码 00000000 00000000 00100000* 32的补码 00000000 00000000 00100000 (正数三码合一)* 2. 118的原码 00000000 00000000 01110110* 118的补码 00000000 00000000 01110110* 3. 安位 & 操作* 00000000 00000000 00100000* 00000000 00000000 01110110* 00000000 00000000 00100000 & 运算后的补码* 4.运算后的原码是 00000000 00000000 00100000* 结果是 32*/
// int cc = ((x&y) & (x|y));
// System.out.println("5.cc = ((x&y) & (x|y))的结果是:"+cc);
案例六:
//推导
// ~-2
// 1. 先得到 -2的原码 10000000 00000000 00000000 00000010
// 2. 2的反码 11111111 11111111 11111111 11111101
// 3. 2的补码 11111111 11111111 11111111 11111110
// 取反操作 ~ 00000000 00000000 00000000 00000001
// 4. 运算后的原码 就是 00000000 00000000 00000000 00000001
// 结果是 1
//
赋值运算符
无法复制加载中的内容
int abc = 100%3;
int abc1 = 0;
abc1 += 10; // abc1+10
abc1 -= 20;// abc1-20
abc1 /= 5;// abc1/5
abc1 %=1;// abc1%1
abc1 <<=1;// abc1<<1
abc1 >>=1;// abc1>>1
三元运算符
int ca = abc1 >10 ? 1 : 2;
相当于if-else ,如果为真执行冒号左边这一个,为假则执行冒号右边
判断 instanceof 对象 instanceof 类
Object v1 = new Var();
if (v1 instanceof Var){System.out.println("yes");
}else {System.out.println("no");
}
java运算符优先级
无法复制加载中的内容
案例一:
int a = 2;int b = 2;int c = a * ++b - a-- << (b = a * 2);//6
// 这里是两个表达式 不是一个
案例二:
int a = 2;
int b = 2;
int c = a * ++b - a-- << (b = a * 2); //16
//这里是两个表达式,后面括号不影响后面的
System.out.println(c);
// 2 * 3 = 6 - 1 -> 5
// 5<<2
今天学习结束啦✿✿ヽ(°▽°)ノ✿
有什么问题欢迎大家提出来,一起进步
世界灿烂盛大,欢迎回家 —— 《全球高考》
3-「季淳卿」 运算符+原码、反码、补码相关推荐
- 2 -「季淳卿」 Redis 字符串+哈希
这里写目录标题 String(字符串) Hash(哈希) 1 -「季淳卿」 Redis基本介绍和String练习 开始下回分解 String(字符串) 代码如下: #-- 1 strlen key 查 ...
- 「季淳卿」零基础学习 MyBatis-Plus-springBoot(笔记总结)
hello,大家好.这里是季淳卿,━(`∀´)ノ亻!,MyBatis-Plus-springBoot 零基础学习笔记总结 文末有代码和.md文件可以下载(小伙伴们可以自取) MyBatis-Plus- ...
- 「季淳卿」MyBatis学习总结
hello,大家好.这里是季淳卿,━(`∀´)ノ亻!,MyBatis 学习笔记总结 MyBatis
- day017:Java进制转换、原码反码补码、位运算、位移运算符
一.进制介绍: 1.进制:指进位制,表示某一位置上的数,运算时是逢X进一. 十进制就是逢十进一,二进制就是逢二进一,八进制就是逢八进一. 2.Java中默认的数值都是十进制,如果要输入其他进制,在数值 ...
- c语言原码 补码 反码,C语言 原码--反码--补码
//原码,反码,补码 #include #include //数值的表示方法--原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数: ...
- 二进制八进制十进制十六进制及原码反码补码
1.进制的介绍 定义:进位制,人们规定的一种进位方式:表示某一位置上的数,运算时是逢X进一位. 十进制是逢十进一:二进制是逢二进一,八进制是逢八进一: 常见进制:二进制,八进制,十进制,十六进制: 学 ...
- 原码 反码 补码的相互转换
原码 反码 补码的相互转换 原码 反码 补码的转换 还是比较 简单基础的问题.之前学习java的时候就学过,后来忘记了,忘记了!!!,后来学了位移运算符,左移 右移 无符号右移 之后就由有点儿懵了. ...
- 原码 反码 补码及应用
原码 反码 补码及应用 原码 什么是原码? 原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负. 56 ==> 0 0111000 符号位 数据 最大值:01111111 == ...
- 原码, 反码, 补码 详解(转载)
原码, 反码, 补码 详解(转载) 繁星*墨菲 于 2020-05-23 10:22:53 发布1015 收藏 75 版权 转载地址:原码, 反码, 补码 详解 - ziqiu.zhang - 博客园 ...
最新文章
- OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
- CloudStack各版本新特性
- Instagram为何如此受欢迎?
- 调用startActivityForResult后,onActivityResult无响应的题目
- Storm的ack机制在项目应用中的坑
- php 数组作用域,如何在php中访问私有作用域命名空间数组数据?
- mysql 水平分表
- java进出口食品安全信息管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- 优酷.kux文件折腾记
- Linux服务器 通过ftp命令下载或上传文件
- Win10 如何在系统内用cmd命令查看系统详细信息
- 基础概念:图片的卷积和池化操作
- 模拟频率、数字频率、模拟角频率之间的关系
- uipath工具介绍
- 天平游码读数例题_天平游码怎么读数?
- 解决office2010安装过程出错的问题
- 基于JavaSwing开发学生信息管理系统(SQLServer数据库版本) 毕业设计 课程设计 大作业
- 在Tomcat上安装部署SAIKU
- expdp异地备份 (expdp导出数据到其他服务器)
- 世界著名电影特效公司
热门文章
- 瑞芯微RK3308方案简介
- 金钥匙学校计算机,金钥匙学校新年贺词:为广大家长点赞
- 方舟原始恐惧mod生物代码_【安卓MOD】方舟生存进化2.0内置修改菜单
- 用信鸽解释HTTPS
- 2019计算机四级真题及答案,【2019年6月大学英语四级真题及答案完整版(卷二)】- 环球网校...
- 2022年最新北京机动车签字授权人模拟试题及答案
- 一入侯门“深”似海,深度学习深几许(深度学习入门系列之一)
- 移动短信发送-SDK2.0
- React实现优雅的弹窗
- 程序员如何高效准备简历和面试04:技术简历应该怎么写、怎么投?