bold 0000 0000 0010 0000
~bold 1111 1111 1101 1111
按位求反运算符的作用是反转原数值中的每一位,使 0 变成 1,1 变成 0。无论 bold 变量占用
2 个字节、4 个字节还是 8 个字节,这都会生成我们期望的结果。
提示:
按位求反运算符有时称为 NOT 运算符,因为对于它操作的每个位,都会得到跟开始不同的值。
因此,在关闭黑体位时,只需对掩码 bold 的反码和 font 变量执行按位与操作,可用的语句如
下所示:
font &= ~bold; //Turn bold off
还可以使用&运算符把几个掩码组合起来,再对结果跟要修改的变量执行按位与操作,将多个位
设置为 0。例如:
font &= ~bold & ~italic; //Turn bold and italic off
这个语句把 font 变量中的斜体和黑体位设置为 0。注意这里不需要括号,因为~运算符的优先
级高于&运算符。但是,如果不清楚运算符的优先级,就应加上括号,表示希望执行的操作。这
肯定是无害的,在需要括号时还可以正常发挥作用。
3. 使用按位异或运算符
按位异或运算符的使用频率远远低于&和 | 运算符,有关它的使用例子也比较少。但它的一个
重要应用是图形编程。在屏幕中创建动画的一种方式是绘制一个对象,删除它,再在一个新位置
重新绘制。如果要求动画很平滑,这个过程就需要重复得很快,其中删除是一个重要的部分。我
们并不想删除和重新绘制整个屏幕,因为这非常费时,屏幕也会出现闪烁。最理想的是,只删除
屏幕上要移动的对象。使用所谓的异或模式就可以做到这一点,得到非常平滑的 动画。
异或模式的理念是,在屏幕上用给定的颜色绘制对象,如果接着用背景色重新绘制它,它就会消
失。如图 3-3 所示。
图 3-3 用异或模式绘图