原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>
时间:2022-05-04
本文章向大家介绍原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>,主要内容包括原码、反码、补码、与(&)、或(|)、非(~)、异或(^)、左移 <<、右移 >>、无符号右移 >>>、衍生运算符、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
原码
数字在计算机中以二进制表示,8位的字长,最高位是符号位, 正数为0,负数为1.比如,3为0000 0011
; -3为1000 0011
。
注意,Java中int为32位。3的16进制表示为3
,-3的16进制为fffffffd
.
反码
正数的反码和原码相同。
负数的反码为符合位不变,其余按位取反。
3 为0000 0011
; -3为1111 1100
。
补码
正数的补码和原码相同。
负数的补码为反码+1.
3 为0000 0011
; -3为1111 1101
与(&)
按位与,位数对齐,全部为1的结果为1.
1&2 == 0 2&3 == 2
0000 0001 0000 0010
0000 0010 0000 0011
--------- ---------
0000 0000 0000 0010
或(|)
按位或,位数对齐,只要有一个为1,则结果为1
1|2 == 3 2|3 == 3
0000 0001 0000 0010
0000 0010 0000 0011
--------- ---------
0000 0011 0000 0011
非(~)
按位取反。
~1 == -2
0000 0001
---------
1111 1110
我们直到负数的表示为反码+1. 所以,该结果中的反码为(1111 1110 - 0000 0001)=1111 1101
,则绝对值原码为0000 0010
, 即2。即结果为-2
.
异或(^)
相同为假,不同为真。
1^2 == 3 2^3 == 1
0000 0001 0000 0010
0000 0010 0000 0011
--------- ---------
0000 0011 0000 0001
左移 <<
所有的位左移,低位即右侧补0.
1<<2 == 4 3<<3 == 24
0000 0001 0000 0011
0000 0100 0001 1000
左移几位则相当于10进制乘以2的多少次方。所以1<<2==1*2*2==4; 3<<<3==3*2*2*2==24
右移 >>
正数右移,高位用0补,负数右移,高位用1补.
1>>2 == 0 13>>2 ==3 -3>>2 == -1
0000 0001 0000 1101 1111 1101
--------- --------- ---------
0000 0000 0001 0011 1111 1111
无符号右移 >>>
正数无符号右移同右移,负数无符号右移则高位补0.
1>>>2 == 0 13>>>2 ==3 -3>>>2 == 1073741823
0000 0001 0000 1101 fffffffd
--------- --------- ---------
0000 0000 0001 0011 3fffffff
衍生运算符
由位运算操作符衍生而来的有:
&= 按位与赋值
|= 按位或赋值
^= 按位非赋值
>>= 右移赋值
>>>= 无符号右移赋值
<<= 赋值左移
- 3385: [Usaco2004 Nov]Lake Counting 数池塘
- 2761: [JLOI2011]不重复数字(平衡树)
- 无图片字体icon
- 数据结构(三):栈与队列
- 3555: [Ctsc2014]企鹅QQ
- 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
- 3097: Hash Killer I
- 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复
- 1684: [Usaco2005 Oct]Close Encounter
- 算法模板——Dinic最小费用最大流
- 算法模板——Dinic网络最大流 1
- SQL Server 使用全文索引进行页面搜索
- 2764: [JLOI2011]基因补全
- 1000: A+B Problem(NetWork Flow)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 5分钟Flink - 时间与语义案例详解
- 5分钟Flink - 时间语义和Watermark
- 3. Pandas系列 - DataFrame操作
- 4. Pandas系列 - 基本功能和统计操作
- 面经手册 · 第8篇《LinkedList插入速度比ArrayList快?你确定吗?》
- 无所不能的Embedding 2. FastText词向量&文本分类
- 5. Pandas系列 - 重建索引
- 6. Pandas系列 - 迭代
- Java 虚拟机基础原理:功能,内存管理,类的加载机制,分析字节码执行过程
- Stack有性能问题?推荐用ArrayDeque队列!队列是什么?什么是双端队列、延迟系列、阻塞队列,全是知识盲区!
- 纯CSS实现照片墙效果
- Tungsten Fabric知识库丨构建、安装与公有云部署
- 7. Pandas系列 - 排序和字符串处理
- JVM调优,程序员必须掌握的知识
- 5分钟Flink - 侧输出流(SideOutput)