如何在整个数组中移位
好的,我会保持简单和简单。
我正在研究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