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

原码

数字在计算机中以二进制表示,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 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

POJ 3278 Catch That Cow(BFS,板子题)

Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions...

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

codevs4919 线段树练习4

 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 给你N个数,有两...

2555
来自专栏Jed的技术阶梯

图解 Java 位运算

需要说明的是,在计算机中,数字是以补码的形式存在的,计算也是用补码来进行计算,计算后的结果也是补码

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

BZOJ1562: [NOI2009]变换序列(二分图 匈牙利)

30%的数据中N≤50; 60%的数据中N≤500; 100%的数据中N≤10000。

721
来自专栏落影的专栏

程序员进阶之算法练习(十六)

前言 正文6道题目来自leetcode––为求职为生的编程网站,目的是工作闲暇之时锤炼代码功底。 没有捷径,但手熟尔; 一步领先,步步领先。 正文 5. L...

3615
来自专栏恰同学骚年

剑指Offer面试题:9.二进制中1的个数

  一个基本的思路:先判断整数二进制表示中最右边一位是不是1。接着把输入的整数右移一位,此时原来处于从右边数起的第二位被移到最右边了,再判断是不是1。这样每次移...

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

RMQ算法

一.概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,...

2617
来自专栏大闲人柴毛毛

剑指offer面试题7——用两个栈实现队列

package offer7; import common.Stack; /** * 用两个栈实现一个队列 * @author chibozhou *...

2596
来自专栏从零开始学 Web 前端

unsigned/signed int/char类型表示的数值范围

我们知道,在计算机内部数值一律使用补码存储。正数的补码与原码一致,负数的补码是符号位为1,其余位是该负数的绝对值按位取反后加1得到。

672
来自专栏算法修养

URAL 2040 Palindromes and Super Abilities 2(回文树)

Palindromes and Super Abilities 2 Time Limit: 1MS Memory Limit: 102400KB ...

3304

扫描关注云+社区