Java 位运算符和 int 类型的实现

其他运算符

# 算术运算符
+、-、*、/、++i、i++、--i、i--

# 关系运算符
==、!=、>、<、>=、<=

# 逻辑运算符
&&、||、!

# 赋值运算符
=、运算符=

# 其他运算符
## 三元运算符
bool表达式 ? x : y
## instanceof 运算符
boolean result = var instanceof classname;

位运算符

  • &
  • |
  • ^ 异或
  • 按位取反
  • << 左移运算符,向左移动指定位数,一般情况下每移动一位都会乘以2
  • >> 右移运算符,向右移动指定位数,一般情况下每移动一位都是除以2
  • >>> 按位右移补零操作符

Java int 的实现

  • int 基本信息
    Java 中 int 为32 位,是基本类型的一种,对应包装类为Integer
    Java 不存在无符号类型,int 由0、1~2^31-1、-1~(-2)^31 三部分组成

  • 负数如何表示?
    负数部分使用补码表示
    补码:原码按位取反得到反码,反码加一得到补码

  • 正整数部分少一个数
    因为 1····0 的补码为其本身,这是一个负数,一个二进制数总能表示偶数个数字,使用了0之后负数能比正数多表示一个,就是 1····0。

重点,Java 中int 位移的特殊情况

根据 int 实现的原理,int 移位会产生一些特殊情况,如:

2147483647<<1 的结果为 -2,为什么呢?因为 2147483647 为 2^31-1(2的31 次方减1),即:0111,1111,1111,1111,1111,1111,1111,1111,当它向右移位得到的结果是 1111,1111,1111,1111,1111,1111,1111,1110,此时对于 Java 来讲,这已经是一个负数了

要先减去1 得到 1111,1111,1111,1111,1111,1111,1111,1101,再取反得到 0000,0000,0000,0000,0000,0000,0000,0010 也就是 2,所以结果是-2

Java 位运算符和 int 类型的实现的更多相关文章

  1. 利用Java位运算符,完成Unsigned转换(无符号)

    方案二:利用Java位运算符,完成Unsigned转换. 正常情况下,Java提供的数据类型是有符号signed类型的,可以通过位运算的方式得到它们相对应的无符号值,参见几个方法中的代码: publi ...

  2. LeetCode刷题笔记(3)Java位运算符与使用按位异或(进制之间的转换)

    1.问题描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 算法应该具有线性时间复杂度并且不使用额外空间. 输入: [4,1,2,1,2] 输 ...

  3. Java位运算符、位移运算符;原码、反码、补码

    文章背景:雪花算法 id 生成长度问题. Java位运算符 - 异或运算符(^)<p>运算规则:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1.</p> - ...

  4. java位运算符生产环境应用分析

    在实际应用场景中 特别是 1,2,4,8,16 这种2的整数次幂的数字,因为具有非常典型的特点 首先是 1.2.4 这几位数了,因为他们的特点就是二进制只有一个为 1 的位,其他位都是 0,并同其他数 ...

  5. Java byte类型转换成int类型时需要 & 0XFF的原因

    Java byte类型转换成int类型时需要 & 0XFF的原因 假设有byte b  = -1; 那么b的二进制是:1111 1111. 如果将b直接转换为int类型,那么二进制是 1111 ...

  6. 【java提高】(17)---Java 位运算符

    Java 位运算符 &.|.^.~.<<.>> 以前学过有关java的运算符,不过开发了这么久也很少用过这个.现在由于开发需要,所以现在再来回顾整理下有关java的运算 ...

  7. Java位运算符浅析

    在学习源码中,发现有大量使用位运算符,这样做的目的是为了节约内存开销和加快计算效率. 位运算符,这个”位”代表这什么? 位:二进制位简称“位”,是二进制记数系统中表示小于2的整数的符号,一般用1或 0 ...

  8. java 位运算符 以及加法 交换两个变量值

    先给出十转二的除法 2       60 30       0 15 0 7 1 3 1 1  1 0  1 60转二 111100 再介绍位运算符 a=60 b=13 A = 0011 1100 B ...

  9. Java位运算符&、|、^、>>、<<、~、>>>

    如果要搞懂Java中的位运算符,首先要搞懂二进制的运算,之前一篇有介绍详细请看 二进制运算-十进制与二进制的转换 Java中的位运算符有:&(按位与).|(按位或).^(按位异或).>& ...

随机推荐

  1. Go JSON 转化规则

    Go语言内置encoding/json包支持JSON序列化和反序列化,有如下转换规则 基本的数据结构映射关系 bool, for JSON booleans float64, for JSON num ...

  2. 20行以内python代码画出各种减压图

    一.太阳花 看到一个很有意思的代码,你若安好,便是晴天!太阳花向你开~ 绘画效果如下: 代码如下: from turtle import * color('red', 'yellow') begin_ ...

  3. React 中 Link 和 NavLink 组件 activeClassName、activeStyle 属性不生效的问题

    首先 导航链接应该使用  NavLink 而不再是  Link NavLink 使用方法见 https://github.com/ReactTraining/react-router/blob/mas ...

  4. Linux 文件夹压缩命令总结

    tar命令 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName gz命令 解压1:gunzip FileName.gz 解压2:gzip ...

  5. [Abp 源码分析]十七、ASP.NET Core 集成

    0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...

  6. QWebView加载网页

    开发环境:win10家庭中文版,vs2013,qt5.5.1 目的:使用webkit加载web页面代码如下: #include #include #ifdef _DEBUG#pragma commen ...

  7. Redis哨兵

    Redis Sentinel Redis哨兵为Redis提供高可用.这就意味着你用哨兵可以创建一个Redis部署,在没有人为干预的情况下抵抗某些失败.(PS:自动故障转移) Redis哨兵还提供其他的 ...

  8. 【朝花夕拾】Android编码风格篇

    结合51CTO学院中张凌华老师讲的编码风格课程,对自己平时工作中的形成的一些编码风格做一些总结. 一. 项目开发目录命名: Requirement - 需求相关文档 Design - 设计 Plann ...

  9. Android--从系统Gallery获取图片

    前言 在Android应用中,经常有场景会需要使用到设备上存储的图片,而直接从路径中获取无疑是非常不便利的.所以一般推荐调用系统的Gallery应用,选择图片,然后使用它.本篇博客将讲解如何在Andr ...

  10. android studio 调用c/c++工程

    首先新建一个工程 这个工程主要测试通过C程序返回一个字符串显示在界面