java位运算和无符号运算
计算机在底层使用的是二进制补码进行运算。
计算规则:
正数的原码、反码、补码是其二进制本身。
负数的原码首先计算其二进制数,然后最高位使用1表示负数,反码是最高位不变其它位取反,补码是在反码的基础上进行+1操作。
System.out.println( 8 >> 1);//正数进行右移位运算
8的二进制是 0000 0000 0000 0000 0000 0000 0000 1000,进行右移1位得到二进制0000 0000 0000 0000 0000 0000 0000 0100,然后转成二进制是4
以此类推
/* 1000
* 0100 4 右移1位
* 0010 2 右移2位
* 0001 1 右移3位
* 0000 0 右移4位
* */
System.out.println( -8 >> 1);//负数进行右移位运算 (右移高位补1)
-8的二进制是1000 0000 0000 0000 0000 0000 0000 1000,这里最高位1表示是负数
/*
* 1000 0000 0000 0000 0000 0000 0000 1000 原码
* 1111 1111 1111 1111 1111 1111 1111 0111 反码
* 1
* 1111 1111 1111 1111 1111 1111 1111 1000 补码
* 1 1111 1111 1111 1111 1111 1111 1111 100 位运算得到的是补码然后转到原码
* 1 0000 0000 0000 0000 0000 0000 0000 011
* 1
* 1 0000 0000 0000 0000 0000 0000 0000 100 -4 原码
* */
System.out.println(8<<2);//正数进行左移位运算
/*
* 0000 0000 0000 0000 0000 0000 0000 1000 原码
* 0000 0000 0000 0000 0000 0000 0010 0000 位运算 32
*/
System.out.println(-8<<2);//负数进行左移位运算(左移地位补0)
/* 1000 0000 0000 0000 0000 0000 0000 1000 -8的原码
* 1111 1111 1111 1111 1111 1111 1111 0111 反码
* 1111 1111 1111 1111 1111 1111 1111 1000 补码
* 11 1111 1111 1111 1111 1111 1111 100000 位运算
* 10 0000 0000 0000 0000 0000 0000 011111 位运算之后补码
* 10 0000 0000 0000 0000 0000 0000 100000 原码
* -32
* */
System.out.println(-9>>>2);无符号运算,高位进行补0,低位舍去
/*
* 1000 0000 0000 0000 0000 0000 0000 1001 原码
* 1111 1111 1111 1111 1111 1111 1111 0110 反码
* 1111 1111 1111 1111 1111 1111 1111 0111 补码
* 001111 1111 1111 1111 1111 1111 1111 01 移位 (移位得到的是正数,所以补码就是其本身)
* */
java位运算和无符号运算的更多相关文章
- JavaScript 32位整型无符号操作
在 JavaScript 中,所有整数字变量默认都是有符号整数,这意味着什么呢? 有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数. 数值范围从 -2^ ...
- java位运算
Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long.int.short.char和 byte,位运算符具体如下表: 运算符 说明 << ...
- java位运算,逻辑运算符
位运算逻辑运算符包括: 与(&),非(~),或(|),异或(^). &: 条件1&条件2 ,只有条件1和条件2都满足, 整个表达式才为真true, 只要有1个为false ...
- Java 位运算超全面总结
1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...
- Java位运算总结
关于位运算,以前也见过,搜过,当时会用了,过后就忘了,今天好好学习一遍,然后整理一下. Java中的位运算,涉及到计算机的二进制,位用bit表示,1Byte=8bit,根据各种基本数据类型占用的字节空 ...
- Java 与无符号那些事儿
最近在使用 Java 作为 WebSocket 客户端连接 Node.js 的 WebSocket 服务器的时候,由于使用的客户端库比较老,所以遇到了字节符号的问题,上网查了一下,看到这篇文章写的很有 ...
- 【Java基础】基本类型与运算【重要】
0. Java基本数据类型 Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long.int.short.char和 byte,位运算符具体如下表 ...
- unsigned无符号、有符号类型的符号拓展
先看一段代码 #include <stdio.h> main(){ unsigned ; char b = a; printf("%d %d",a,b); ; } a输 ...
- [JAVA]移位运算(左移<<,右移>>和无符号右移>>>)
一.背景知识 整数在内存中是以二进制的形式存在的,而且存的是该整数的补码.最高位代表符号位,正数为0,负数为1 正数的补码是其二进制本身,负数的补码则是 符号位保持1不变,其他位按位取反再加1,+0和 ...
随机推荐
- JetBrains 系列软件--操作数据库+centos系统
这系列软件贼强大! 能操作数据库 也能操作centos(linux)系统 由于这系列都有这两个功能,下面以最近常用的JetBrains PhpStorm 2017.2.1 x64来举例子: 一.操作数 ...
- 跨境网上收款 找PayPal没错(php如何实现paypal支付)
开发前准备 在我的博客中 有介绍如何获取ID 和 secret : 好了 在上一篇博客中详细介绍了也不少: 跨境网上收款 找PayPal没错(如何获取ID 和 secret) http://blog. ...
- 遗传算法MATLAB实现(2):一元函数优化举例
遗传算法提供了一种求解非线性.多模型.多目标等复杂系统优化问题的通用框架. 先从例子开始,慢慢再总结理论... [例]利用遗传算法计算函数f(x)=x*cos(5*pi*x)+3.5在区间[-1,2. ...
- OFBiz 16.11.03的直接部署、eclipse部署和IDEA部署
一.在OFBiz官网下载最新的发行版本,也就是16.11.03版本. 下载地址:http://ofbiz.apache.org/download.html 点击页面Apache OFBiz 16. ...
- 云数据库RDS存储能力进化解析!
数据库是企业IT系统的核心,其性能表现会直接影响整体业务系统的性能表现,而影响数据库性能因素包括系统架构设计.应用程序业务SQL语句.数据库参数优化配置.数据库运行的资源能力.系统架构设计和应用程序业 ...
- 网络流24题 搭配飞行员(DCOJ8000)
题目描述 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭 ...
- mysql的执行计划概念说明
explain中的列的说明 1. id列 id列的编号是 select 的序列号,有几个 select 就有几个id,并且id的顺序是按 select 出现的 顺序增长的. id列越大执行优先级越高, ...
- KiCad EDA 画圆弧
KiCad EDA 画圆弧 看起来像是成功了. KiCad 画圆弧一直没有完善解决,但是 KiCad 一直有在努力.
- thinkphp5.0中英文切换
首先来看下它的配置: // 是否开启多语言 'lang_switch_on' => true, //语音列表 'lang_list' => ['zh-cn','en-us'], // 获取 ...
- HTML5入门指南
1.HTML5到底是什么? HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定.目标是取代1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在互联 ...