我们知道,在Java中常用的位移运算有三种,分别是:<>(带符号右移)和>>>(无符号右移)。

这一次,我们来看一下其中的带符号右移运算符>>在负数计算时的效果。

首先,是一段测试代码:

public static void main(String[] args) {

int num = -10;

System.out.println(num >> 1);

System.out.println(num >> 2);

}

读者可以先思考一下输出为多少?输出:

-5

-3

看到这个结果,可能读者就有点疑问了,一般来说,左移右移不是相当于乘以2或者除以2么,为什么这里会出现-3呢?

我们首先需要明确的是,>>运算符叫做带符号右移,也即为其在运算时的规则为在要处理的数字的左端补一个等于符号位的数字,即为正数补0,负数补1。可以记为:符号位不变,左边补上符号位。

下面一个问题就是,这个运算符所操作的对象是什么呢?可能第一反应是:不就是左边的这个数么?这么说当然没有问题,但是计算机中存储的数字并不是直观上我们看到的这个数,计算机中所存储和操作的是数字的补码,如果是正数的话,就不用考虑这么多,但是如果是负数的话,就要注意了。

这里,笔者用8位的数字来说明一下为什么’-5 >> 1 = -3`。

首先,我们看一下-5的形式:

源码:1000 0101

反码:1111 1010

补码:1111 1011

左移一位之后:

补码:1111 1101

反码:1111 1100

原码:1000 0011

那么现在看一下,结果-3已经出现了。

因此,在遇到负数的位移运算的时候,写代码之前还是要好好考虑一下的。

java负数右移_Java中负数的右移相关推荐

  1. java右移位_java中的左移 右移

    1. 左移运算符 左移运算符< 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位,0补最低位 如果 ...

  2. java 无符号右移_java中的无符号移位运算

    1. 无符号右移   >>>  或 >>> = 无符号右移(>>>)跟右移(>>)运算符不一样. 右移不改变数的正负. 对于一个正数, ...

  3. java 二进制位运算_Java中的二进制与位运算

    大家在阅读一些算法或者一些开源框架的时候,总会见到~,>>,>>>,|这种大量的位运算,因此想要读明白 这部分代码,对于计算机的二进制操作以及位运算是必须要了解的,那么本 ...

  4. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  5. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...

  6. c语言中负数_C语言中负数的模数

    c语言中负数 C中的模数运算符(%)运算符 (The modulus operator (%) operator in C) The modulus operator is an arithmetic ...

  7. java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信

    你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...

  8. java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  9. java 序列化实例_Java中的序列化与反序列化实例

    创建的字节流与平台无关.因此,在一个平台上序列化的对象可以在另一个平台上反序列化. 为了使Java对象可序列化,我们实现java.io.Serializable可序列化接口. ObjectOutput ...

最新文章

  1. 纳税服务系统十一【抽取BaseService、条件查询】
  2. python sort 部分元素_Python 犄角旮旯--List
  3. Coding:C++类定义实现部分成员函数
  4. Android传感器-开发指南
  5. 4 网络、挂载、关机
  6. 课程设计-三层架构ASP.NET作品分享网站(sql server数据库)
  7. java绘制图形_Java绘制图形
  8. CSS布局:三栏布局,中间栏固定宽度,左右两边自适应
  9. vue-cli3 vue.config.js配置
  10. 企业信息系统战略规划
  11. PS、PR素材资源网站
  12. android,繁体+代码,2013.08.08——— android 汉语言简繁体转换
  13. 关于扫雷的c语言程序设计,C语言程序设计扫雷游戏实验报告
  14. 故障处理 | 网站500,无法打开站点(突然无法打开,代码和服务器没做调整)
  15. 【最新技术早知道】PCIe Gen5 还没用上,Gen6 就来了?PCIe 6.0 系列文章之:《PCIe 6.0,到底 6 在哪?》
  16. 特斯拉看位置说服务器错误,特斯拉App惊现大面积宕机!车主集体发飙,官方处理太弱智了...
  17. 英语单词 One 个人 2. 出生和死亡
  18. 贝叶斯统计——先验分布与后验分布
  19. [DSP 日常记录] #1 冯诺依曼结构、哈佛结构与改进型哈佛结构
  20. 【Java学习笔记】 网络编程04 优化字符串拼接:JSON

热门文章

  1. 查看java源码时出现class文件而不是java文件,可能是因为java的安装路径下没有src.zip文件而是javafx-src.zip文件
  2. Eclipse 安装Spring tool suite 解决官网下载jar文件无法安装/安装过程出错,及如何下载对应版本zip文件等问题,避坑
  3. C++设计模式--工厂方法模式
  4. java定时器的使用
  5. java lt10_PAT 1006 换个格式输出整数 (15)(C++JAVAPython)
  6. python自动化测试平台github_GitHub - DangKaio/FXTest: 接口自动化测试平台——python+flask版,支持http协议...
  7. just函数 python_在python里写Monad
  8. linux可以打开浏览器嘛,Linux下怎样可以打开浏览器
  9. php怎样输出多个空格,【整理】解决php输出时出现多余的空格或者换行
  10. cmake / CMAKE _ * _ OUTPUT_DIRECTORY 说明