本文介绍了Bitshift从二进制数起的特定位?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我对位从开始很多地方转移二进制数的想法如下所示。我第一次提出这个问题是一个零填充问题here但我现在开始觉得有可能是一个优雅的bitshift解决方案。我可以bitshift做这样的 bitshift(5,1)
,其中 101
到 1010
,但如何从一个特定的位呢?例如, 101
从一定位移位,如从第二位开始让 101
到 1001
?
从一个特定的位置开始一个活动
myBinary = de2bi(23);按升序%位,从DEC数字bi2de格式
%23 = 11101(BI递减),BI_bi2de = 10111(增加)shiftAmount = 3; %量的位移位
阈值= 3; %比特以增加顺序移位从阈%正确的结果:
%10111 - > 10'111 ---> 10000111(移位3次从阈值3)尾= myBinary(1:阈值);
myBinary(1:阈值)= [];
myBinary = [零(1,shiftAmount),myBinary];
myBinary = [尾,myBinary]%递增的顺序
按递减顺序myBinary =翻转(myBinary)%
从很多地方转移多次起
解决方案
use a mask to seperate the input into the "shifting part" and "static part".
Shift the "shifting part" and then re-assemble the number using a bitor
operation:
function out = bizarreBitShift( bNum, fromBit, shiftAmount )
% construct a mask
msk = uint32( (2^( fromBit - 1 ) )-1 );
shiftPart = bitand( uint32(bNum), bitcmp(msk) ); % bitcmp - complement of bits
staticPart = bitand( uint32(bNum), msk );
out = bitshift( shiftPart , shiftAmount );
out = bitor( out, staticPart );
这篇关于Bitshift从二进制数起的特定位?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!