使用逐位编码样式的位更新操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用逐位编码样式的位更新操作相关的知识,希望对你有一定的参考价值。

我想更新一些5位长的数据,而不管其他位的状态如何,即每个位应该相对于5位长数据中的其他位独立地表现。下面是我的代码。任何建议都对我有用。

case 35:
    AtemSwitcher.setTransitionNextTransition(0,(a=00001<<1));   
    break;
case 36:
    AtemSwitcher.setTransitionNextTransition(0,(b=00001<<2));
    break;
case 37:
    AtemSwitcher.setTransitionNextTransition(0,(c=00001<<3));
    break;
case 38:
    AtemSwitcher.setTransitionNextTransition(0,(d=00001<<4));
    break;
答案

如果您只想对特定位进行操作,则需要使用OR,AND和XOR进行屏蔽操作:

要设置一位,您需要使用按位OR:

c = c | (1 << 4);
c |= 1 << 4; //set bit number 4
c |= (1 << 4) | (1 << 3); //set bit 4 and 3

要将位设置为0,您需要使用按位AND:

c &= ~(1 << 4); //delete bit 4

原因,为什么你还需要〜运算符,因为如果任何输入为0,&操作将为0,所以你想要将要清除的位设置为0,这样它们在结果中将为0 。

您还可以使用按位异或来切换一下:

c ^= (1 << 4); //toggle bit 4

以上是关于使用逐位编码样式的位更新操作的主要内容,如果未能解决你的问题,请参考以下文章

实现一个整数的位权前后置换

计算机组成原理——奇偶校验码

计算机组成原理——奇偶校验码

位运算相关

这个位排序代码中的位操作是如何工作的?

如何使用事件侦听器来加载动画片段的循环