原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>

原码

数字在计算机中以二进制表示,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

衍生运算符

由位运算操作符衍生而来的有:

&= 按位与赋值

|=  按位或赋值

^= 按位非赋值

>>= 右移赋值

>>>= 无符号右移赋值

<<= 赋值左移

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数说工作室

【SAS Says】基础篇:描述性分析(下)

好吧,这一节是留给处女座的,主要说如何用proc tabulate和proc report产生一个更加耐看的报告。有时候print、means和freq产生的报...

3765
来自专栏java一日一条

Java TreeMap 源码解析

可以看到,相比HashMap来说,TreeMap多继承了一个接口NavigableMap,也就是这个接口,决定了TreeMap与HashMap的不同:

451
来自专栏数据结构与算法

UOJ #117. 欧拉回路

欧拉回路 有一天一位灵魂画师画了一张图,现在要你找出欧拉回路,即在图中找一个环使得每条边都在环上出现恰好一次。 一共两个子任务: 这张图是无向图。(50分) 这...

3446
来自专栏编程之旅

数据结构——无权图的路径问题(C++和java实现)

好像又是接近半个月没有更新,这半个月忙着结婚的各项事情,本来预计的学习任务也拖拖拉拉,进度缓慢。吐槽一句,拍婚纱照真的是最非常非常累的一件事情,不想再有下次了。

762
来自专栏静默虚空的博客

Java正则速成秘籍(三)之见招拆招篇

导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验、查找、替换与规则匹配的文本。 又爱又恨的正...

16410
来自专栏ml

uva-----11292 The Dragon of Loowater

Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, ...

2975
来自专栏猿人谷

翻转句子中单词的顺序

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a ...

1897
来自专栏木可大大

二进制那些事

理清字符集和字符编码关系中介绍到计算机内部由集成电路决定了计算机的信息只能用二进制数处理。本期将介绍二进制那些事。 移位运算 移位运算指的是将二进制数值的各数位...

3288
来自专栏Danny的专栏

【软考路上】——原码、反码、补码、移码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1141
来自专栏软件开发 -- 分享 互助 成长

原码 反码 补码 移码

1、正数的原码、补码、反码均为其本身; 2、负数(二进制)的原码、补码、反码公式: 反码 = 原码(除符号位外)每位取反 补码 = 反码 + 1 反码 =...

2206

扫码关注云+社区