首页
学习
活动
专区
圈层
工具
发布

替代Xor
EN

Stack Overflow用户
提问于 2013-02-28 07:49:24
回答 2查看 339关注 0票数 4

我得到了以下方法:

代码语言:javascript
复制
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评论)我需要一个替代方案吗?

我已经查找了MSDN上的异或,但仍然很难理解boldButton_Click过程中的实现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-28 08:16:14

按位XOR切换一个标志。假设样式位域如下所示

代码语言:javascript
复制
00000000
     ^^^
     BIU (Bold, Italic, Underline)

因此,FontStyle.Bold的值应该是:

代码语言:javascript
复制
00000100

现在,something Xor FontStyle.Bold将在something中翻转这一点。示例:

代码语言:javascript
复制
00000111 Xor 00000100 = 00000011    (Boldness removed)
00000001 Xor 00000100 = 00000101    (Boldness added)

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

因为您显式地要求选择:您可以检查bit是否设置为style And Bold <> 0,然后将其设置为style = style Or Bold或移除它为style = style And (Not Bold)

票数 4
EN

Stack Overflow用户

发布于 2013-02-28 08:15:38

从你的评论来看,你不明白Xor在这里做了什么,我认为一个解释会给你带来更多的帮助,而不仅仅是一个人工的替代结构。如果您想了解它是如何工作的,那么首先需要了解一下按位操作。,假设对于一个字体,字体样式被保存为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 100就是100,所以只是粗体。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15130181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档