运算符(二)
来源:互联网 发布:ccdd数据库 编辑:程序博客网 时间:2024/05/29 03:38
运算符: D-逻辑运算符
E-位运算符
F-三目运算符(三元运算符)
D—a(逻辑运算符):定义:可以连接某个值或某一个表达式
D—b:基本逻辑运算符:&逻辑(单)与(并且的关系)
特点:有false则false
|逻辑(单)或(两个满足一个即可)
特点:有true则true
!逻辑非
特点:非false则true
^逻辑异或
特点:相同则false,不同则true
(同性相斥,异性相吸)
D—c:扩展逻辑运算符:&&逻辑双与
||逻辑双或
共同点:&&和&具有同样的效果,有false则false
||和|具有同样的效果,有true则true
不同:&&具有短路效果,左表达式为false则右边不执行
||也有短路效果,左表达式为true则右边不执行
E—a(位运算符):基本位运算符:&位与
|位或
^位异或
~反码(按位取反)
计算一个数据对另一个数据进行位运算操作,必须算出该数据对应的二进制数据。
E—b:扩展位运算符:
<<左移动 ----a<<b
当a>0时,a<<b=a*2^b
当a<0时a<<b=最高位丢掉,在右边补齐0
>>右移动 ----a>>b
当a>0时,a>>b=a/2^b
当a<0时 a>>b=(最高位是1,坐左补齐1,最高位是0,左补齐0)
>>>无符号移动 ----a>>>b
当a>0时,a>>>b=a/2^b
当a<o时,a>>>b=(无论最高位是1或0,均左补齐0)
执行程序如下:
/* 符号左边的数为正数时
* << 左移动
* >> 右移动
* >>>无符号移动
*
*/
public static void main(String[] args){
//当符号左边的数为正数时
System.out.println(3<<2);//符号左边乘以2的移动次幂 3*2^2=3*4=12
System.out.println(3>>2);//符号左边除以2的移动次幂 3/2^2=3/4=0(/是取整的)
System.out.println(3>>>2);//符号左边除以2的移动次幂 3/2^2=3/4=0(/是取整的)
System.out.println(4>>>2);//符号左边除以2的移动次幂 4/2^2=4/4=1(/是取整的)
System.out.println(12>>>2);//符号左边除以2的移动次幂 12/2^2=12/4=3(/是取整的)
System.out.println("--------分割线---------");
//当符号左边的数为负数时
/*
* << 左移动,首位丢掉,右补齐0
* >> 右移动,最高位是1,左补齐1;最高位是0,左补齐0;
* >>>无符号移动,无论最高位是1或0,均左补齐0
*
*
*/
System.out.println(-3<<2);
System.out.println(-3>>2);
System.out.println(-3>>>2);
/*
* -3<<2
* -3的二进制: 10000000 00000000 00000000 00000011:原码
* 11111111 11111111 11111111 11111100:反码
* 反码+1=补码
* 11111111 11111111 11111111 11111101:补码
* 补码左移两位
* (11)11111111 11111111 11111111 111101(00)
* 左移后的补码再-1
* 11111111 11111111 11111111 11110011 :反码
* 10000000 00000000 00000000 00001100 :原码
* 结果为: -12
*
* -3>>2
* -3的二进制: 10000000 00000000 00000000 00000011:原码
* 11111111 11111111 11111111 11111100:反码
* 反码+1=补码
* 11111111 11111111 11111111 11111101:补码
* 补码右移两位
* 1111111111 11111111 11111111 111111(01)
* 右移后的补码再-1
* 1111111111 11111111 11111111 111110 :反码
* 1000000000 00000000 00000000 000001 :原码
* 结果为:-1
*
* -3>>>2
* -3的二进制: 10000000 00000000 00000000 00000011:原码
* 11111111 11111111 11111111 11111100:反码
* 反码+1=补码
* 11111111 11111111 11111111 11111101:补码
* 左补齐0:
* 0011111111 11111111 11111111 111111(01)
* 结果是:1073741823
*
*
*
*/
}
F—a(三目运算符):基本运算符:单目运算符,双目运算符。
F—b:三目运算符又叫三元运算符;
格式: (表达式)? 表达式1的结果:表达式2的结果
输出:最终结果是boolean类型。
执行流程:1)先判断表达式是否成立
2)成立则为true,将表达式1的结果作为结果输出。
3)不成立则为false,将表达式2的结果输出。
F—c:练习题:
/*
* 练习:1)求两个数据最大值
* 2)求三个数据最大值
* 3)求两个数据是否相等
*/
public static void main(String[] args){
//定义两个变量,求最大值
int a = 98;
int b = 99;
//定义max变量
int max1 = (a>b) ? a:b;
System.out.println("最大值是:"+max1);
System.out.println("--------下一题-------");
//定义三个变量,求最大值
int x = 34;
int y = 100;
int z = 99;
//定义max变量
int max2 = (x>y) ? x:y;
//定义中间变量,用来存放max2的结果
int Max = (z>max2) ? z:max2;
System.out.println("三个数据的最大值是:"+Max);
System.out.println("--------下一题-----");
//定义两个变量
int m = 44;
int n = 34;
//判断是否相等需要定义boolean类型
boolean flag = (m==n) ? true:false;
System.out.println("判断结果:"+flag);
}
- 运算符(二)
- 运算符(二)
- 运算符重载(二)
- 运算符重载(二)
- 【Java】(二)运算符小结(赋值运算符)
- 位运算符介绍(二):Java位运算符
- 位运算符介绍(二):Java位运算符
- 运算符及控制流程(二)
- partial_sort 二 重载cmp()运算符
- 运算符重载练习(二)
- JAVA第三弹(运算符<二>)
- 黑马程序员-------运算符重载(二)
- C++中的运算符重载(二)
- 多态性之运算符重载(二)
- (二)运算符、表达式和语句
- 数据类型和运算符(二)
- C++ 运算符重载(二)
- Swift学习-运算符(二)
- Restful安全认证及权限的一种解决方案
- CentOS6.4 环境配置手册
- Excel VBA高效办公应用-第六章-客户资料管理-Part3 (对筛选结果进行统计)
- 转自goosman的编程开发心路历程
- javascript原生dom操作
- 运算符(二)
- VB时间函数(VB6)
- 【题解】Leetcode.65.Valid Number (qduoj.162.莫妮提)
- iOS学习笔记-076.核心动画02——CABasicAnimation(基本动画)
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- struts2
- 线程池实现原理及案列
- 快速排序的两种方式及其时间复杂度
- [tomcat学习] 责任链模式实例