如何在整数数组之间移位

时间:2013-11-16 10:49:04

标签: java int bit-manipulation shift sha256

好吧,我会保持这个简单的&简单。

我正在研究Java中的SHA-256的粗暴实现,为了保持类方法有利于应用程序中的其他类,我决定将数据I / O作为32位整数数组(INT)。显然,这些用途在很大程度上依赖于按位运算符的使用,因此我如何实现按一个整数数组进行按位移位

给定一组数据,假设:

 int[16] data;

其中前14个整数的数据用0x0000000填充,用于对话,但最低的两个分别被填充:

 data[14] = 0x12345678;
 data[15] = 0x01ABCDEF;

如何完成左移,以便左移2,

 data[13] = 0x00000012;
 data[14] = 0x34567801;
 data[15] = 0xABCDEF00;

有人有任何想法吗?

2 个答案:

答案 0 :(得分:0)

1)编写帮助方法,将int[16] data转换为byte[64] bytedata

2)使用构造函数BigInteger(byte[] val)

创建一个BigInteger

3)使用shiftLeft(int n)shiftRight(int n)

进行Bitshift

4)编写一个帮助方法,将byte[64] bytedata转换回int[16] data。见byte array to Int Array here

BigInteger中的其他有用方法包括clearBit(int n)setBit(int n)flipBit(int n)testBit(int n)

答案 1 :(得分:-1)

左移按位:

`x << n` is the same as `x *= 2^n`  

要查看溢出位(MSB):     x / (2^32) >= 1 //因为我们使用的是32位int


同样,对于按位右移:

`x >> n` is the same as `x /= 2^n`  

要查看溢出位(LSB):     x % 2

通过添加或减去设置值将溢出位附加到相邻的int。你应该像我在评论中提到的那样使用BigInteger,其他任何东西都需要一个实现,你自己读取并附加在数组位置之间移动的位。