2012-12-03 4 views
1

Я немного озадачен поведением BitVector32. См. Тест:BitVector32 - первый бит истинный

[TestClass] 
public class ParallelPortDevices { 
    [TestMethod] 
    public void BitVector32Test() { 
     var lVector = new BitVector32(0); 

     Assert.IsTrue(lVector[0]); 
     Assert.IsFalse(lVector[1]); 
    } 
} 

Это проходит. То есть первый бит установлен в 1 (согласно тесту). Однако если вы запустите метод ToString, вы получите «BitVector32 {0000000000000000000000000000000000}"

Что-нибудь, что мне не хватает?

Заранее благодарен!

+1

Индексы указывают на битовую маску, а не на индекс. – vcsjones

ответ

7

BitVector32 не использует синтаксис индексатора для индекса, он использует его как битовую маску. Например, если вы должны были сделать это:

lVector[7] = true; 

ToString даст 0...000111.

декомпилированный код геттер выглядит следующим образом:

return ((long) this.data & (long) bit) == (long) (uint) bit; 

Так что в конечном итоге происходит это:

(0 & 0) == 0 

Что, конечно, верно.

+0

Как смущает! Благодаря... – Rashack

 Смежные вопросы

  • Нет связанных вопросов^_^