《JAVA---day03---运算符》

/*【位运算符】
运算符:    运算            范例                        说明

<<:            左移            3<<2=12--->3*2*2=12
>>:            右移            3>>2=1---->3/2=1
>>>:        无符号右移        3>>>2=1--->3/2=1
&:            与运算            6 & 3=2
|:            或运算            6 | 3=7
^:            异或运算        6^3=5
~:            反码            ~6=-7

*/
//左移:左移就是乘以2的次幂运算。移几位就是几次幂。
//左移的用处:比如要在计算机中做3*4的运算,
//在计算机中是用二进制相乘的011*100,但是
//现在可以用位运算的方式(左移来运算),
//即把3左移2位就得到结果了,这样的运算速度很快,
//其弊端是只能操作2的倍数,在开发过程中如果要操作2
//的倍数或者2的次幂时,可用位运算来实现。

//右移:右移就是除以2的次幂运算。移几位就是几次幂。
/*
右移时,原最高位是什么,空位就补什么(保持原来的符号性)。
*/

//无符号右移:不用于做除法运算。
/*
无论原最高位是什么,空位都补0.
用处在于:获取二进制中某一段的值 比如:
一个二进制为:00000000 00111100 00000000 00110110
如果三位三位的获取其值(一次右移无符号三位),第一次
右移三位取得的是(110:结果为6),然后去掉这三位,则
下一个三位变成了最低的三位,再获取这个三位……最后得到的
结果是这个二进制对应的八进制数。(获取四位,就是二进制
对应的十六进制)

总结就是:在进行关于2的运算时,考虑左移和右移运算。
           在进行二进制的位操作是,要用到无符号右移。
*/

//&运算:
/*
在二进制中在&运算过程中,只有全为1时,结果才为1,
否则为0.

用处是:在获取某一个二进制的某几位的时候比如:
一个二进制为00101011,要获取最后三位是可以用三个1和
最后三个二进制为相与
一句话:用来获取二进制中的有效位1
00101011
00000111
-----------
00000011------最后三位为二进制位
当要获取第二个三位时,可以先把此二进制无符号右移三位
在和00000111相与即可
*/

//|:运算
/*
6|3=
 110
|001
----
 111 --->7(十进制)
*/

//^:运算
/*
6^3=5
  110
 ^011
 ----
  101 --->5
 ^011
 ----
  110 --->6
  即6^3^3 = 6;
  一个数异或另一个数,结果还是原数。(用于加密方面)
*/

//~:取反运算:
/*
~6=-7:计算如下:
6--->00000110 取反得:--->11111001
因为在计算机中是用补码形式存放的。所以要把11111001
看成一段补码,现在把这个补码转换为原码(先变为反码:
减1就行得--->11111000,再变为原码,最高位是符号位,不变
其他为按位取反得--->10000111再转化为十进制为-7)
比如6取反再加1得-6
*/

//位运算符的练习:

/*
1,如何最有效率的计算2*8
通过左移来运算:2<<<3--->2*8 = 16;
//System.out.println(2<<3);--->结果是16
2, 对两个整数变量的值进行互换(不需要第三方变量)
   int a = 3,b = 7;

   //通过第三方变量的方法如下:
   int temp;
   temp = a;
   a = b;
   b = temp;

   //(不经过第三方变量)通过和的形式。有个弊端,两个数据较大,可能会超出int范围。
   //这个方法不太好
   a = a+b;    //a = 3+7;
   b = a-b;    //b = 3+7-7;    b = 3;
   a = a=b;    //a = 3+7-3;    a = 7;

   //(不经过第三方变量)通过位运算来解决。
   a = a^b;    //a = 3^7;
   b = a^b;    //b = 3^7^7; --->b = 3;
   a = a^b;    //a = 3^7^3; --->a = 7;
*/

//三元运算符:格式:(条件表达式)?表达式1:表达式2;
    //int x = 2,y;
    //y = x>1?100:200;

    //需求:有三个数,想知道最大的是哪个?
    /*
    int a = 2,b=3,c =4,max;
    if(a>b)
        max = a;
    if(max<b)
        max = b;
        System.out.println("max="+max);
    */

class  OperateDemo1
{
    public static void main(String[] args)
    {
        int a=3,b=40,c=5;
        int max;
        if(a>b)
            max = a;
        else
            max = b;
        if(max<c)
            max = c;
        else
            max = b;
        System.out.println("max="+max);

    }
}
时间: 2024-11-07 16:53:30

《JAVA---day03---运算符》的相关文章

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

IOS测试框架之:athrun的InstrumentDriver源码阅读笔记

athrun的InstrumentDriver源码阅读笔记 作者:唯一 athrun是淘宝的开源测试项目,InstrumentDriver是ios端的实现,之前在公司项目中用过这个框架,没有深入了解,现在回来记录下. 官方介绍:http://code.taobao.org/p/athrun/wiki/instrumentDriver/ 优点:这个框架是对UIAutomation的java实现,在代码提示.用例维护方面比UIAutomation强多了,借junit4的光,我们可以通过junit4的

Yii源码阅读笔记 - 日志组件

?使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category);Yii::trace($message, $category); 两者的区别在于后者依赖于应用开启调试模式,即定义常量YII_DEBUG: defined('YII_DEBUG') or define('YII_DEBUG', true); Yii::log方法的调用需要指定message的level和category.category是格式为“xxx.yyy.z

源码阅读笔记 - 1 MSVC2015中的std::sort

大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格式化,去掉或者展开用于条件编译或者debug检查的宏,依重要程度重新排序函数,但是不会改变命名方式(虽然MSVC的STL命名实在是我不能接受的那种),对于代码块的解释会在代码块前(上面)用注释标明. template<class _RanIt, class _Diff, class _Pr> in

CI框架源码阅读笔记5 基准测试 BenchMark.php

上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功能,各模块之间可以相互调用,共同构成了CI的核心骨架. 从本篇开始,将进一步去分析各组件的实现细节,深入CI核心的黑盒内部(研究之后,其实就应该是白盒了,仅仅对于应用来说,它应该算是黑盒),从而更好的去认识.把握这个框架. 按照惯例,在开始之前,我们贴上CI中不完全的核心组件图: 由于BenchMa

CI框架源码阅读笔记2 一切的入口 index.php

上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里这次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1.       设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中

Apache Storm源码阅读笔记

欢迎转载,转载请注明出处. 楔子 自从建了Spark交流的QQ群之后,热情加入的同学不少,大家不仅对Spark很热衷对于Storm也是充满好奇.大家都提到一个问题就是有关storm内部实现机理的资料比较少,理解起来非常费劲. 尽管自己也陆续对storm的源码走读发表了一些博文,当时写的时候比较匆忙,有时候衔接的不是太好,此番做了一些整理,主要是针对TridentTopology部分,修改过的内容采用pdf格式发布,方便打印. 文章中有些内容的理解得益于徐明明和fxjwind两位的指点,非常感谢.

CI框架源码阅读笔记4 引导文件CodeIgniter.php

到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入

jdk源码阅读笔记之java集合框架(二)(ArrayList)

关于ArrayList的分析,会从且仅从其添加(add)与删除(remove)方法入手. ArrayList类定义: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Monaco } span.s1 { color: #931a68 } public class ArrayList<E> extends AbstractList<E> implements List<E> ArrayList基本属性: /** *

dubbo源码阅读笔记--服务调用时序

上接dubbo源码阅读笔记--暴露服务时序,继续梳理服务调用时序,下图右面红线流程. 整理了调用时序图 分为3步,connect,decode,invoke. 连接 AllChannelHandler.connected(Channel) line: 38 HeartbeatHandler.connected(Channel) line: 47 MultiMessageHandler(AbstractChannelHandlerDelegate).connected(Channel) line: