2013-05-28 28 views
0

我最近在java项目中工作,我想处理一个整数的位,以便我可以检查一个数字的LSB。 我已经找到了很多可以妥善处理的办法,但没有...有没有办法让我(我改变)LS从int?

键= 4 重点4二进制是100 我想以某种方式提取3 LSB 4这是1。 有没有一种算法可以做到这一点?

+0

你知道二进制算术吗?使用它。另外,什么样的整数值'键'去? – Hanut

+0

@Hanut正值 – Antifa

+4

[Java教程:位移和位移运算符](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html) –

回答

4

使用比特移位及位与:(索引值为从0)

int getBit(int number, int index) 
{ 
    return (number >> index) & 1; 
} 

getBit(4, 2)返回1

您还可以使用% 2而不是& 1

+0

优秀和优雅的方法!非常感谢你!也许这将是灵活性的+1 – Antifa

+2

+1。 –

2

使一个位掩码和移位:

int bitmask = 4; 

int extractedBit = (i & BIT3) >> 2; // is now the 3rd lsb. 
1

好的,试试这个。由于第3个LSB将基于数字的单位位置值,但无论大小如何,如果它小于4或大于7,则该值为0.因此,单位中的(0,1,2,3)U(8,9)会给出第3个LSB如0(4,5,6,7)给予1

int key = 12000; 
int i=4; 
if((key/(10^(i-1))%10 < 4 || (key/(10^(i-1))%10 >7) 
    lsb3 = 0; 
else 
    lsb3 = 1; 
+0

这只给出第三个LSB? – Antifa

+0

几乎我想 – Hanut

+0

不,我的意思是我需要找到第i个LSB每次...我不需要只有第三个LSB。不过谢谢 – Antifa

相关问题