java 左右移位

左右移位

运算符

右移运算符

>>

左移运算符

<<

char

java中,char占用两个字节。2*8=16位。 a-z以ascii码形式存储,因此,对应的int值分别为97-122;
特殊符号 _对应的ascii码为95;

对char字符的移位,实际上就是对95、97、98、… 122的移位,即对正数的移位。

int和ascii码的对照表链接。

122对应的ascii码为01111010;

算数左移

算数左移,符号位不变,低为补0。
m << n
m转化为二进制数后,求其补码,接着对该补码高位移除n位,并在其低位补上n个0;

以’a’举例,其他字符同样

‘a’ << 2

'a’原码

00000000 01100001

'a’补码,对于正数,补码等于源码

00000000 01100001

左移两位

00000000 01100001
移位后
00000001 10000100

因此,a左移2位后的int值为388。

int a = 'a';
Log.i(TAG,"a:" + (a<<2));
Log.i(TAG,"a:" + a);
2023-06-14 10:56:21.994 27468-27468/cn.jj.contentpro I/JJWorld.MainActivity: a:388
2023-06-14 10:56:21.994 27468-27468/cn.jj.contentpro I/JJWorld.MainActivity: a:97

算数右移

低位溢出,符号位不变,并用符号位补空出的高位

m >> n
将m转化为二进制数,并取得其补码,对该补码算数右移n位的运算就是将其低位移除n个数,高位补n个代表正负符号的数

(‘a’<< 2) >> 2
原码

00000001 10000100

补码

00000001 10000100

右移动两位后:

00000000 01100001

因此,(‘a’<< 2)右移2位后的int值为97。

其他注意事项

由于’a‘的低7位都为有效数字,所以如果希望左移后可以复原,最多左移9位。

你可能感兴趣的:(android,java,android)