二进制

二进制是逢2进位的进位置,0,1是基本算符

原码反码补码

  在基本数据类型那里,有详细解释

  1. 二进制的最高位数是符号位:0表示整数,1表示负数
  2. 正数的原码,反码,补码都一样
  3. 负数的反码 = 它的原码符号位不变,其它位取反
  4. 负数的补码 = 它的反码 + 1
  5. 0的反码,补码都是0
  6. java中的数都是有符号的
  7. 在计算机运算的时候,都是以补码的方式来运算的

位运算符

  java中有4个位运算,分别是“按位与&,按位或|,按位异或^,按位取反~”,他们的运算规则是:

    按位与& —— 两位全为1,结果为1

    按位或|  ——  两位有一个为1,结果为1

    按位异或 ^ —— 两位一个为0,一个为1,结果为1

    按位取反~ —— 0变1,1变0

注意:计算的时候用补码做才是正确的,用源码算是错的

public class pra2 {
public static void main(String[] args) {
//算的时候用补码算,才是正确的结果
System.out.println("~2=" + (~2));
System.out.println("2&3=" + (2&3));
System.out.println("2|3=" + (2|3));
System.out.println("~-5=" + (~-5));
System.out.println("-3^3="+(-3^3));
}
} ~2=-3
2&3=2
2|3=3
~-5=4
-3^3=-2

几个例子

移位运算

  java中有3个移位运算符:<<,>>算术右移和算数左移,以及>>>逻辑右移,运算规则:

    >>  算术右移:低位溢出,符号位不变,并用符号位补溢出的高位

    <<  算术左移:符号位不变,低位补0,就相当于*2

    >>>逻辑右移:低位溢出,高位补0

public class pra2 {
public static void main(String[] args) {
//算的时候用补码算,才是正确的结果
//1向右移两位
System.out.println("1>>2="+(1>>2));
System.out.println("-1>>2="+(-1>>2)); System.out.println("1<<1="+(1<<1));//移动移位*2
System.out.println("1<<2="+(1<<2));//移动两位*4
System.out.println("2<<2="+(2<<2));//移动两位*4
System.out.println("-1<<2="+(-1<<2)); System.out.println("3>>>1="+(3>>>1));
System.out.println("3>>>2="+(3>>>2));
}
} 结果:
1>>2=0
-1>>2=-1
1<<1=2
1<<2=4
2<<2=8
-1<<2=-4
3>>>1=1
3>>>2=0

几个例子

Java学习日记基础篇(八) —— 二进制、位运算、位移运算的更多相关文章

  1. Java学习日记——基础篇(二)基本语法

    变量 变量和常量是程序处理的两种基本数据对象,变量是程序的基本组成单位 变量的目的就是确定目标并提供存放空间 public class Hello { public static void main( ...

  2. Java学习日记基础篇(六)—— 抽象类、接口、final

    抽象类 为什么要有抽象类? 因为父类方法有不确定性,我们在Animal中定义了一个方法,但是它会被子类的方法覆盖掉,我们就不知道这个方法原本是做什么的 public class test1 { pub ...

  3. Java学习日记基础篇(四)——类,对象之成员变量,成员方法,构造方法

    面向对象(Object Oriented) 一.面向对象杂谈 面向对象(Object Oriented),我的翻译是以物体为目标的,就是说编程的时候是建立一个物体,然后对这个物体进行操作. Java语 ...

  4. Java学习日记——基础篇(一)常识

    JAVA简介 Java的标准 Java是一种语言,一个平台包含JavaSE.JavaEE.JavaME三个版本 JavaSE标准版(属于Java的基础部分,可以开发C/S构架的桌面应用程序) Java ...

  5. Java学习日记基础篇(九) —— 集合框架,泛型,异常

    集合框架 有事我们会需要一个能够动态的调整大小的数组,比如说要添加新员工但是数组已经满了,并且数组的大小是在定义的时候定死的,所以我们就需要一个能够动态调整大小的数组或者用链表解决,而java中提供了 ...

  6. Java学习日记基础篇(七) —— 数组、排序

    数组 为什么要有数组? 案例:一个养鸡场有六只鸡,他们的体重分别为3kg,5kg,1kg,3.4kg,2kg,50kg.请问这六只鸡的总体重和平均体重是多少? public class test5 { ...

  7. Java学习日记基础篇(三-下)——流程控制之循环控制

    循环控制 for循环 语法: for(循环初值;循环条件;步长) { 语句; //循环体 } 例子: import java.io.*; public class Demo4 { public sta ...

  8. Java学习日记——基础篇(三-上)基本语法之运算符和流程控制

    运算符 算术运算符 听其名而知其意,就是用于计算的,java中常用的是: +   加 -    减 *    乘 /    除 %  取模,取余——%可以用来得到两个数相除的余数 小练习——写一个ja ...

  9. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

随机推荐

  1. C# 小数各种操作

    Math.Ceiling();//向上取整 //举一反三 Math.Floor();//向下取整 Math.Round();//四舍六入五取偶

  2. Python初识面向对象

    初识面向对象 面向过程 VS 面向对象 面向过程的圣墟设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西 优点是:极大的降低 ...

  3. echarts使用结合时间轴timeline动态刷新案例

    1.echarts简介 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Fire ...

  4. ArcGIS Runtime SDK for Android 定位权限(GPS定位\网络定位)

    ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION: android.permission.ACCESS_COARSE_LOCATION:是基站定位,即基于无线网络 ...

  5. Linux命令——yum

    翻译自:20 Linux YUM (Yellowdog Updater, Modified) Commands for Package Management 前言 本篇文章将介绍如何使用RedHat开 ...

  6. python词云图之WordCloud

    1. 导入需要的包package import matplotlib.pyplot as plt from scipy.misc import imread from wordcloud import ...

  7. 【OF框架】使用IDbContextTransaction在框架中对多个实体进行事务操作

    准备 引用框架,按照规范建立数据库表及对应实体. 一.事务操作 关键代码 示例代码如下: //插入数据,使用数据库事务,不支持多连接. var dbContext = IoCHelper.Resolv ...

  8. python高级特性-filter

    python内建的函数filter用于过滤序列 和map()相同:filter()也接收一个函数的序列. 和map()不同:filter()把传入的函数依次依次作用于每个元素,然后根据返回值是True ...

  9. PAT_B 20

    这道题就是简单的贪心,有几个注意点: 1.又是一个单体有多个属性(即月饼有总量,总价,单价几个属性),这个时候可以考虑使用struct结构,我还是傻傻使用pair,还是没有养成习惯,幸好这道题存下来两 ...

  10. java容器一:Collection概述

    Collection概览 java容器有两类,第一类是Collection,存储的是对象的集合:第二类是Map,存储的是键值对(两个对象以及它们之间的对应关系)的集合 Collection接口下面有三 ...