二进制

二进制是逢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. mongodb入门基本语法

    show dbs 查看所有数据库列表 二. 创建数据库 使用数据库. 创建数据库 use student 如果真的想把这个数据库创建成功, 那么必须插入一个数据. 数据库中不能直接插入数据,只能往集合 ...

  2. Python爬虫之BeautifulSoap的用法

    1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

  3. git bash push 本地的commit到远程 -- ssh keys设置

    1.  检查是否已经创建 ssh keys git bash 下,cd ~/.ssh 如何出现“No such file or directory”,则表示需要创建一个ssh keys. 2. 创建新 ...

  4. Source Insight用法

    快捷键 Symbol: Browse Project Symbols-:F7, Alt+G Relation View Relationship->For Functions->Pefer ...

  5. stm32 视频小车

    1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ...

  6. Android笔记(二十四) Android中的SeekBar(拖动条)

    拖动条和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程度,而拖动条则通过滑块的位置来标识数值——而且拖动条允许用户拖动滑块来改变值,因此拖动条通常用于对系统的某种数值进行调节,比如调节音量等 ...

  7. KVM虚拟机快照链创建,合并,删除及回滚研究

    1 QEMU,KVM,libvirt关系 QEMU QEMU提供了一个开源的服务器全虚拟化解决方案,它可以使你在特定平台的物理机上模拟出其它平台的处理器,比如在X86 CPU上虚拟出Power的CPU ...

  8. [leetcode]存在重复

    题目描述: 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [1,2,3,1] 输出 ...

  9. KVM虚拟化——简介

    KVM 基于内核的虚拟机KVM(Kernel-Based Virtual Machine)是2007年问世的开源虚拟化解决方案.KVM需要两个条件: ①硬件支持全虚拟化 ②操作系统为Linux KVM ...

  10. C++——overloading

    参考 C++——overloading principle analysis operator overloading C语言中,对一个东西进行操作一定要涉及到一个函数,对于自定义类型,为了实现其四则 ...