本文介绍了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从二进制数起的特定位?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-19 01:09