位运算部分,之前没有深入做过应用。所以在这里回顾
下面的代码做了一些中间步骤的转换,打印出a值的变化。
a := 7                   
a = a &^ Readable  : 0110  // 置零运算结果完全理解,但老师讲到这个是为了把R权限消掉,这样对应的话,可读位是指最后一位吗?让我想到Linux权限位rwx,是不是我错误的联想了?有点混淆。
a = 7
a = a &^ Executable: 0011 
a = 7
a = a &^ Writable   :  0101
func TestBitClear(t *testing.T) {
    a := 7
    t.Logf("%04b\t%04b\t%04b\t%04b", a, Readable, Writable, Executable)               //0111    0001    0010    0100
    t.Logf("%04b\t%04b\t%04b\t%04b", a, a&Readable, a&Writable, a&Executable)         //0111    0001    0010    0100
    t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable) //        true    true    true
    a = a &^ Readable
    t.Logf("%04b\t%04b\t%04b\t%04b", a, a&Readable, a&Writable, a&Executable)         //0110    0000    0010    0100
    t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable) //        false   true    true
    a = 7
    a = a &^ Executable
    t.Logf("%04b\t%04b\t%04b\t%04b", a, a&Readable, a&Writable, a&Executable)         //0011    0000    0010    0000
    t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable) //        false   true    false
    a = 7
    a = a &^ Writable
    t.Logf("%04b\t%04b\t%04b\t%04b", a, a&Readable, a&Writable, a&Executable)         //0101    0000    0000    0000
    t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable) //     false   false   false
}
 展开