如何解决有没有更快的方法来在Matlab中为uint64执行左旋转
我想优化这个Matlab函数,该函数执行uint64数字向左旋转
function Sh_x = ROL(x,nShift)
i = 1;
while i <= nShift
y=reshape(dec2bin(typecast(swapbytes(x),'uint8'),8).',1,[]);
bit = double(y(1))-48;
x = bitset(x,64,'uint64');
Sh_x = uint64(bitshift(x,'uint64'));
Sh_x = Sh_x + uint64(bit)* uint64(2)^0;
x = Sh_x;
i = i + 1;
end
end
解决方法
bitshift(x,nShift,'uint64')
将64位整数左移nShift
个值,丢弃在左侧溢出的位,并在右侧添加零。
这导致预期输出的左侧部分。您所缺少的是左侧溢出的位。
bitshift(x,nShift-64,'uint64')
将64位整数右移64-nShift
值,丢弃在右边退出的值,并在左边添加零。其余的位是在第一个左移中左移的位。这导致了预期输出的正确组成部分。
使用bitor
组合两者:
Sh_x = bitor(bitshift(x,'uint64'),...
bitshift(x,...
'uint64');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。