在Java中获取int的特定位子集
作者:互联网
我将如何获取Java中int的特定子集(例如5-10位)?
寻找一种可以传递特定位位置的方法.我不确定如何创建一个根据输入改变的遮罩,或者即使那是应该怎么做的遮罩.
我知道这就是让前台说出一个int的10位的方式:(我认为)
int x = num>> 22;
解决方法:
假设您有一个数字n,并希望位从i到j(i = 5,j = 10).
请注意,i = 0将给您最后一点
int value = n & (((1 << (j-i)) - 1) << i );
会给你结果.
左侧很明显:您有一个值,并将在其上放置一个位掩码.
掩码的值是((1<(j-i))-1)<<一世.它说:
>取1位(值:0000000000000001)
>将其左移j-i次(值:2 ^(10-5)= 2 ^ 5 = 32 = 0000000000100000)
>减去1(值:31 = 0000000000011111)-您看到最低位反转了吗?
>向左移动i次(值:31 * 32 = 992 = 0000001111100000)
因此,您已经获得了5-10位的位掩码(更准确地说,是从5到9,因为不包括第10位).
标签:bit-manipulation,java 来源: https://codeday.me/bug/20191031/1972375.html