>> a = 255
a =
255
>> bitset(a,1,0)
ans =
254
这里的第一位设置为0,所以我们得到11111110等于254
>> bitset(a,[1,2],0)
ans =
254 253
此处,第1位和第2位分别设置为0。因此我们得到 11111110相当于254 11111101相当于253
如何获得等于252的11111100?
答案 0 :(得分:1)
两次应用bitset
:
bitset(bitset(a, 1, 0), 2, 0)
申请顺序无关紧要。
或者,您可以使用bitset
等同于应用正确的bitand
,bitor
和bitcmp
操作序列的事实。
由于您有兴趣关闭多个位,因此可以
bitand(bitset(a, 1, 0), bitset(a, 2, 0))
答案 1 :(得分:1)
这里是单线:
b = sum(2.^(bits-1))
分开:
bits
使用给定的位计算整数。请注意,unique
不得包含重复的元素。使用bits = unique(bits)
来强制执行此操作:c = bitcmp(b,'uint32')
。
bitand(a,c)
计算以上内容的32位补码。与补码“与”运算会重置给定的位。
a = 112;
bits = [1,2];
bitor(a,sum(2.^(bits-1)))
计算输入数字与给定位关闭的整数的二进制与。
设置位更容易:
@property
答案 2 :(得分:1)
也许最明确,最容易理解,您可以将其转换为表示二进制的字符串,然后在其中进行操作,然后再转换回去。
a = 255
bin_a = flip(dec2bin(a)) % flip to make bigendian
bin_a([1, 2]) = '0'
a = bin2dec(flip(bin_a))
答案 3 :(得分:0)
这是一个基于@Mad Physicist的回答的小小的递归函数,该函数允许将数据中任意数量的位清零。感谢您提供原始信息。递归对于大多数人来说可能是显而易见的,但它可能会帮助某人。
function y = zero_nbits(x, n)
y = bitset(x, n, 0)
if n > 1
y = zero_nbits(y, n-1);
end
end