Xor的替代品

时间:2013-02-28 07:49:25

标签: vb.net

我得到了以下方法:

Private Sub boldButton_Click(sender As System.Object, e As System.EventArgs) Handles boldButton.Click
    Dim curFont As Font
    Dim newFont As Font
    curFont = rtb.SelectionFont
    If curFont IsNot Nothing Then
        'create the new font
        newFont = New Font(curFont.FontFamily, curFont.Size, curFont.Style Xor FontStyle.Bold)
        'set it
        rtb.SelectionFont = newFont
    End If
End Sub

目前在了解代码curFont.Style Xor FontStyle.Bold的这一部分时遇到的问题。在不使用operator Xor的情况下获得相同结果的有效方法是什么?

编辑(由us2012评论)我需要替代方案吗?

我查了Xor on MSDN但仍无法理解boldButton_Click程序中的实施情况。

2 个答案:

答案 0 :(得分:4)

根据你的评论判断你不明白Xor在这里做了什么,我认为解释会比人工替代建筑更有帮助。如果你想了解它是如何工作的,你首先需要了解bitwise operations.一旦你知道了,想象一下,对于字体,字体样式保存为0和1。为简单起见,假设有3位,第一位用于粗体,第二位用于斜体,第三位用于下划线。 (所以101是粗体下划线,011是斜体下划线等。此外,FontStyle.Bold是100等。)。

然后,与按位操作类似:

oldstyle Or FontStyle.Bold创造了一种大胆的新风格,无论旧风格如何。 (如果oldstyleFontStyle.Italic = 010,则010 Or 100 = 110,则新样式为粗体斜体。)

oldstyle Xor FontStyle.Bold创建一个新样式,如果旧样式不是粗体,则粗体,如果旧样式是粗体,则不粗体。 (假设oldstyle是粗体和斜体,所以110,然后110 Xor 100010,所以只是斜体。但是旧样式是正​​常的000 ,然后000 Xor 100100,所以只需加粗。)

答案 1 :(得分:4)

按位异或切换标志。我们假设样式位域看起来像这样

00000000
     ^^^
     BIU (Bold, Italic, Underline)

因此FontStyle.Bold的值为:

00000100

现在something Xor FontStyle.Bold只会在something中翻转此位。例如:

00000111 Xor 00000100 = 00000011    (Boldness removed)
00000001 Xor 00000100 = 00000101    (Boldness added)

请注意,其他位不受影响。


由于您明确要求替代方案:您可以检查该位是否已设置style And Bold <> 0,然后将其设置为style = style Or Bold或将其移除style = style And (Not Bold)