在128位的数目按位移位操作 [英] Bitwise shift operation on a 128-bit number
本文介绍了在128位的数目按位移位操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
比方说,我有4个32位整数数组,我用它来存储128位的数字。
我怎么能离开执行,并在此128位数字右移?
谢谢!
解决方案
无效shiftl128(
unsigned int类型和放大器;一个,
unsigned int类型和放大器; b,
unsigned int类型和放大器; C,
unsigned int类型和放大器; D,
为size_t K)
{
断言(K< = 128);
如果(K> = 32)//超过31位的移位32位整数是不确定
{
A = B;
B = C;
C = D组;
D = 0;
shiftl128(A,B,C,D,K-32);
}
其他
{
A =(A<< K)| (B个;>(32-k))的;
B =(B<< K)| (c取代;>(32-k))的;
C =(C<< K)| (d取代;>(32-k))的;
D =(D<< K);
}
}无效shiftr128(
unsigned int类型和放大器;一个,
unsigned int类型和放大器; b,
unsigned int类型和放大器; C,
unsigned int类型和放大器; D,
为size_t K)
{
断言(K< = 128);
如果(K> = 32)//超过31位的移位32位整数是不确定
{
D = C:
C = B:
B = A;
一个= 0;
shiftr128(A,B,C,D,K-32);
}
其他
{
D =(℃下≤(32-K))| (D>> K); \\
C =(B&所述;≤(32-K))| (C>> K); \\
B =(A&所述;≤(32-K))| (B>> K); \\
A =(A>> K);
}
}
Lets say that I have an array of 4 32-bit integers which I use to store the 128-bit number
How can I perform left and right shift on this 128-bit number?
Thanks!
解决方案
void shiftl128 (
unsigned int& a,
unsigned int& b,
unsigned int& c,
unsigned int& d,
size_t k)
{
assert (k <= 128);
if (k >= 32) // shifting a 32-bit integer by more than 31 bits is "undefined"
{
a=b;
b=c;
c=d;
d=0;
shiftl128(a,b,c,d,k-32);
}
else
{
a = (a << k) | (b >> (32-k));
b = (b << k) | (c >> (32-k));
c = (c << k) | (d >> (32-k));
d = (d << k);
}
}
void shiftr128 (
unsigned int& a,
unsigned int& b,
unsigned int& c,
unsigned int& d,
size_t k)
{
assert (k <= 128);
if (k >= 32) // shifting a 32-bit integer by more than 31 bits is "undefined"
{
d=c;
c=b;
b=a;
a=0;
shiftr128(a,b,c,d,k-32);
}
else
{
d = (c << (32-k)) | (d >> k); \
c = (b << (32-k)) | (c >> k); \
b = (a << (32-k)) | (b >> k); \
a = (a >> k);
}
}
这篇关于在128位的数目按位移位操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文