首页 > 其他 > 详细

了解位运算

时间:2021-01-07 15:54:41      阅读:26      评论:0      收藏:0      [点我收藏+]

声明:本文来源于个人网络阅读理解、摘抄、整理,作为查询复习工具,如有错漏,恭请指正

位、字节、字是计算机数据存储的单位。

是最小的存储单位,每一个位存储一个1位的二进制码。

一个字节8位

字通常为16、32或64个位组成。

机器数

一个数在计算机中的二进制表示形式,叫做这个数的机器数。

机器数是带符号的,在计算机用机器数的最高位存放符号,正数为0,负数为1

机器数的真值

最高位看正负,余下算数值,数值为机器数真值

java基本数据类型

type length signed
boolean 1bit
byte 8bit
char 2byte 没有负数
short 2byte
int 4byte
long 8byte
float 4byte
double 8byte

Java的原始类型里没有无符号类型,如果需要某个宽度的无符号类型,可以用>>>,这个是java的无符号右移操作符

char类型采用UTF-16编码,无所谓有无符号,在Java编程中强烈建议不要使用char类型

原码

符号位+真值

反码

正数的反码是其本身;

负数的反码就是原码符号位除外,其他位按位取反;

补码

正数的补码就是其本身;

负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(也即在反码的基础上+1)

正数: 原码 = 反码 = 补码

负数: 补码 = 反码 + 1

<< 表示左移

计算步骤

1、转换为二进制

2、换算为补码

3、补码进行相应的位移操作得到结果补码

?正负均低位补0

4、补码转换为原码

5、进制换算为结果

相同真值的正负数 左移后的结果真值也相同

16  << 2  补码左移2位 低位补0
0001 0000   ->  0100 0000 = 1x 2^6 = 64

-16 << 2  补码左移2位 低位补0
反码 1001 0000   ->  1110 1111
补码 1110 1111   ->  1111 0000

左移后的补码 1111 0000   ->  1100 0000
左移后的反码 1100 0000   ->  1011 1111
左移后的原码 1011 1111   ->  1100 0000 = - 1x2^6= -64

>> 表示右移

16  >> 2  补码右移2位 高位补0
0001 0000   -> 0000 0100  = 1x 2^2 = 4

-16 << 2  补码右移2位 高位补1
反码 1001 0000   ->  1110 1111
补码 1110 1111   ->  1111 0000

右移后的补码 1111 0000   ->  1111 1100
右移后的反码 1111 1100   ->  1111 1011
右移后的原码 1111 1011   ->  1000 0100 = - 1x2^2= -4

计算步骤

1、转换为二进制

2、换算为补码

3、补码进行相应的位移操作得到结果补码

?正:高位补0

?负:高位补1

4、补码转换为原码

5、进制换算为结果

相同真值的正负数 右移后的结果真值也是相同的

>>> 无符号右移

正负右移均补0

正数同>>

负数

-16 >>> 2
32位原码:1000 0000 0000 0000 0000 0000 0001 0000
    反码:1111 1111 1111 1111 1111 1111 1110 1111
    补码:1111 1111 1111 1111 1111 1111 1111 0000
    
补码右移2位:0011 1111 1111 1111 1111 1111 1111 1100
补码为正  补码=反码=原码
结果:Integer.valueOf("00111111111111111111111111111100",2)=1073741820

& 按位与

两位全为1,结果才为1

0&0=0;0&1=0;1&0=0;1&1=1

例如:51&5 即0011 0011 & 0000 0101 =0000 0001 因此51&5=1.

(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都是零的数值相与,结果为零。

(2)取一个数中指定位。

例如:设X=10101110,取X的低四位,用X&0000 1111=0000 1110即可得到。

方法:找一个数,对应x要取的位,该数的对应位为1,其余位为零,此数与x进行“与运算”可以得到x中的指定位

| 按位或

只要有一个为1,结果就为1。

0|0=0; 0|1=1;1|0=1;1|1=1;

例如:51|5 即0011 0011 | 0000 0101 =0011 0111 因此51|5=55

特殊用法

常用来对一个数据的某些位置1。

方法:找到一个数,对应x要置1的位,该数的对应位为1,其余位为零。此数与x相或可使x中的某些位置1。

了解位运算

原文:https://www.cnblogs.com/liusheng-666/p/14246775.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!