關(guān)于量化位數(shù)和A/D轉(zhuǎn)換精度的分析

字號:

問題提出:
    (夢的邊緣(注意:不是夢想的邊緣哦,^_^))
    Private Sub Form_Click()
     Dim sum As Integer, i As Integer, j As Integer
     sum = 0
     For i = 0 To 1
     sum = sum + 1
     For j = 0 To 3
     If Not (j Mod 2) Then sum = sum + 1
     Next j
     Next i
     Print "sum="; sum
    End Sub
    運行結(jié)果為什么是sum=10,而不是sum=6
    答:
    這是一道比較精巧的題目!
    首先我們先看一下:
    Print Not (0),Not(-1),Not(1)
    運行結(jié)果是什么。
    估計一部分網(wǎng)友會做成:
    0,-1,1轉(zhuǎn)換成布爾型,分別為false,true,true
    因此結(jié)果為:true false false
    但是實際上運行結(jié)果為:
    -1 0 -2
    為什么呢?
    原來這個是Not的特殊用法。
    當Not后為數(shù)值型時,先自動四舍五入后,做位運算。
    以Not(0)為例,
    0二進制為:00000000,則Not(0)將對該二進制取反,
    為:11111111,首位為1,為負數(shù),
    則求補碼11111111表示的數(shù)是多少。
    由補碼求該負數(shù)絕對值的原碼,規(guī)則為:減一,各位取反。
    得:00000001即為1。