按位操作符:

首先先记住一件事,方便理解:是否对应正负对应10.

1.与(&):11得1,10得0,00得0.

2.或(|):11得1,10得1,00得0.

3.异或(^):11得0,10得1,00得0(相同为0,不同为1).

4.非(~):这是一元运算符,上面3个是2元运算符,0得1,1得0(取反)。

移位操作符:

记住:移位操作符左边的是整数类型(int)的被操作数,右边是要移动的位数。

1.左位移操作符(<<):能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0,低位是右边,高位是左边)

2.“有符号”右移位操作符(>>):按照操作符右侧指定的位数将操作符左边的操作数向右移动(“有符号”右移位操作符使用“符号扩展”:若符号为正,则在高位插入0;若符号位负,则在高位插入1)。

3.“无符号”右移位操作符(>>>):它使用“零扩展”:无论正负,都在高位插入0.

4.左移操作符只有那么一种,不和右移位操作符一样。

负数位运算:

记住:int类型是8字节,32位的,高位的0是不显示的。而且最高位的1或者0代表的是正或者负,所以int类型表示的范围是:2的31次方-1至负的2的31次方(最高位是符号,所以只有31位代表数字,又因为正数里面有个0,所以是2的31次方要减1)。

一个正整数的位运算就是按二进制转为32位的源码,高位的0不显示(Integer.toBinaryString(数字))

以下代码以-6为例子,Integer.toBinaryString(-6)输出之后是(11111111  11111111  11111111  11111010)

Integer.toBinaryString(6) = 110;

1.转为源码:负数最高位为1,其他按其绝对值取(10000000  00000000  00000000  00000110)

2.反码:最高位不变,其他位取反(11111111  11111111  11111111  11111001).

3.补码:给反码进行+1操作(11111111  11111111  11111111  11111010)说明:最后的001代表的是1,1+1=2,所以最后三位应该是为2,2转为二进制是010

重新转为10进制,只需按相反操作就行了:

1.补码-1变反码

2.反码:最高位不变,其他位取反变成源码

3:源码按二进制转十进制计算

即使是对负数进行位移操作,也只是在补码变反码之间加一个步骤,将补码位移变成新补码,再用新补码-1变反码

负数位运算资料来源:https://blog.csdn.net/weixin_37322501/article/details/85759105

《Thinking in Java》位运算的更多相关文章

  1. Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range

    在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...

  2. Java位运算总结:位运算用途广泛《转》

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  3. Java位运算原理及使用讲解

    前言日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法.举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1.可能的做法是使用三木运算符,判断原始值 ...

  4. (转)java位运算

    转自:http://aijuans.iteye.com/blog/1850655 Java 位运算(移位.位与.或.异或.非)   public class Test { public static ...

  5. Java位运算总结:位运算用途广泛

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  6. Java 位运算超全面总结

    1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...

  7. 我们必须要了解的Java位运算(不仅限于Java)

    本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...

  8. Java位运算经典实例

    一 源码.反码.补码 正数的源码.反码.补码相同,例如5:            5的源码:101            5的反码:101            5的补码:101 负数的源码.反码.补 ...

  9. Java 位运算(移位、位与、或、异或、非)

    Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...

  10. java位运算

    Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long.int.short.char和 byte,位运算符具体如下表: 运算符 说明 << ...

随机推荐

  1. 【LeetCode】找出所有数组中消失的数字

    [问题] 给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次.找到所有在 [1, n] 范围之间没有出现在数组中的数字. ...

  2. uboot源码分析2-启动第二阶段

    一.背景知识 1.uboot第二阶段应该做什么? 概括来讲uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗.时钟),然后初始化DDR并且完成重定位. 由宏观分析来讲,uboot的第二 ...

  3. 认识json,详解JsonConfig

    说到json 初学者很迷茫,不知json怎么为何物,以及怎么用.我简单说下我的了解 既然用了json 我们就要知其然也知其所以然.下面有几个疑问 1.为什么要用json?也就是json 的优势 2.我 ...

  4. 八数码问题 双向BFS/Hsh链表存储

    转自洛谷 作者EndSaH #include<iostream> #include<string> #include<cmath> #include<cstr ...

  5. Python中基于Unpacking与Packing进行分割,组合操作的嵌套元组数据结构的应用

    对于二叉树,图等,Python可采用基于Packing与Unpacking形成的嵌套元组数据结构来模拟,这里Packing指,比如a=b,c则,a就成了一个包含b,c的元组,Unpacking是指,比 ...

  6. 字符设备驱动之LED驱动

    实现 ①编写驱动框架 ②编写硬件实现代码 (在Linux系统下操作硬件,需要操作虚拟地址,因此需要先把物理地址转换为虚拟地址 ioremap()) 如何实现单个灯的操作: 实现方法之一--操作次设备号 ...

  7. 指令——rm

    一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. 指令:rm (remove,移除.删除) 作用 ...

  8. [LeetCode] 930. Binary Subarrays With Sum 二元子数组之和

    In an array A of 0s and 1s, how many non-empty subarrays have sum S? Example 1: Input: A = [1,0,1,0, ...

  9. 073-PHP数组元素相加

    <?php $arr1=array(1,2,3,4,'5','05',TRUE); //等价于 1+2+3+4+5+5+1=21 $arr2=array(1,2,'ABC',3,'hello', ...

  10. VUE3.x 前瞻

    文档: API Reference 教程 课件 1. 初始化项目 // ① npm i -g @vue/cli // ② vue create my-project // ③ npm install ...