如何在整个数组中移位

好的,我会保持简单和简单。

我正在研究Java中的SHA-256的粗暴实现,并且保持有助于应用程序中其他类的类方法,我决定将数据作为32位整数数组(I / O) 。 显然,这些类型的用途很大程度上依赖于按位运算符的使用,所以我如何完成跨整数整数的按位移位,如下所示:

给定一组数据,假设:

 int[16] data;

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

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

我如何完成向左移动,如果左移两位,

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

任何人有任何想法?


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

2)使用构造函数BigInteger(byte[] val)创建一个BigInteger,

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

4)编写一个帮助器方法将byte[64] bytedata转换回int[16] data 。 在这里看到INT数组的字节数组

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


对于按位左移:

`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,其他任何东西都需要一个实现,在这个实现中你可以自己读取和附加在阵列位置之间移动的位。

链接地址: http://www.djcxy.com/p/36389.html

上一篇: How to shift bits across array of ints

下一篇: Bitwise operators and "endianness"