Java学习日记基础篇(八) —— 二进制、位运算、位移运算
二进制
二进制是逢2进位的进位置,0,1是基本算符
原码反码补码
在基本数据类型那里,有详细解释
- 二进制的最高位数是符号位:0表示整数,1表示负数
- 正数的原码,反码,补码都一样
- 负数的反码 = 它的原码符号位不变,其它位取反
- 负数的补码 = 它的反码 + 1
- 0的反码,补码都是0
- java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的
位运算符
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学习日记基础篇(八) —— 二进制、位运算、位移运算的更多相关文章
- Java学习日记——基础篇(二)基本语法
变量 变量和常量是程序处理的两种基本数据对象,变量是程序的基本组成单位 变量的目的就是确定目标并提供存放空间 public class Hello { public static void main( ...
- Java学习日记基础篇(六)—— 抽象类、接口、final
抽象类 为什么要有抽象类? 因为父类方法有不确定性,我们在Animal中定义了一个方法,但是它会被子类的方法覆盖掉,我们就不知道这个方法原本是做什么的 public class test1 { pub ...
- Java学习日记基础篇(四)——类,对象之成员变量,成员方法,构造方法
面向对象(Object Oriented) 一.面向对象杂谈 面向对象(Object Oriented),我的翻译是以物体为目标的,就是说编程的时候是建立一个物体,然后对这个物体进行操作. Java语 ...
- Java学习日记——基础篇(一)常识
JAVA简介 Java的标准 Java是一种语言,一个平台包含JavaSE.JavaEE.JavaME三个版本 JavaSE标准版(属于Java的基础部分,可以开发C/S构架的桌面应用程序) Java ...
- Java学习日记基础篇(九) —— 集合框架,泛型,异常
集合框架 有事我们会需要一个能够动态的调整大小的数组,比如说要添加新员工但是数组已经满了,并且数组的大小是在定义的时候定死的,所以我们就需要一个能够动态调整大小的数组或者用链表解决,而java中提供了 ...
- Java学习日记基础篇(七) —— 数组、排序
数组 为什么要有数组? 案例:一个养鸡场有六只鸡,他们的体重分别为3kg,5kg,1kg,3.4kg,2kg,50kg.请问这六只鸡的总体重和平均体重是多少? public class test5 { ...
- Java学习日记基础篇(三-下)——流程控制之循环控制
循环控制 for循环 语法: for(循环初值;循环条件;步长) { 语句; //循环体 } 例子: import java.io.*; public class Demo4 { public sta ...
- Java学习日记——基础篇(三-上)基本语法之运算符和流程控制
运算符 算术运算符 听其名而知其意,就是用于计算的,java中常用的是: + 加 - 减 * 乘 / 除 % 取模,取余——%可以用来得到两个数相除的余数 小练习——写一个ja ...
- java学习笔记-基础篇
Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...
随机推荐
- 为Visual Studio安装其他控件(cognex 康耐视)时报错:未能加载文件或程序集 EnvDTE, Version=8.0.0.0
解决办法: 在VS的路径下(一般为:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Private ...
- FreeRTOS 任务创建和删除(静态)
#define configSUPPORT_STATIC_ALLOCATION 1 //打开静态方法 StackType_t TaskStackBuffer[50]; //任务堆栈大小 StaticT ...
- 如何:确定已安装的 .NET Framework 版本
用户可在他们的计算机上安装和运行 .NET Framework 的多个版本. 当你开发或部署应用时,你可能需要知道用户的计算机上安装了哪些 .NET Framework 版本. .NET Framew ...
- kubeadm init初始化报错解决,亲测
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull' error ...
- 第十七篇:WEB服务器之HTTP协议
本篇主要为为了实现WEB服务器,其中包含了HTTP协议的理解,以及TCP的三次握手.四次挥手等方面相关知识,同时还包含了关于web浏览器与服务器之间的通信过程. 一.web浏览器 通常在我们上网时会在 ...
- hexo Yelee 主题的busuanzi网站统计没数字显示问题解决
j进入你的Yelee主题路径: themes\yelee\source\css\_partial 修改该路径下的: footer.styl 修改文件内容: 将内容改为: 然后你的站点就可以了
- Python 写入训练日志文件并控制台输出
1. 背景 在深度学习的任务中,通常需要比较长时间的训练,因此我们会选择离开电脑.笔者在跟踪模型表现, 观察模型accuracy 以及 loss 的时候,比较传统的方法是在控制台print输出或者直接 ...
- lua游戏开发易错踩坑录
一.local local函数一定要在调用之前定义(切记,不然会报错或者不能调用该函数) 情况1:监听调此函数后定义 base.model:addlistener("被监听的函数" ...
- PAT_B 20
这道题就是简单的贪心,有几个注意点: 1.又是一个单体有多个属性(即月饼有总量,总价,单价几个属性),这个时候可以考虑使用struct结构,我还是傻傻使用pair,还是没有养成习惯,幸好这道题存下来两 ...
- JQgrid处理json数据
jqGrid 实例中文版网址:http://blog.mn886.net/jqGrid/国外官网:http://www.trirand.com/blog/jqgrid/jqgrid.html http ...