官术网_书友最值得收藏!

3.3.4 比較錯誤

1.是否有不同數據類型的變量之間的比較運算,例如,將字符串與地址、日期或數字相比較?

2.是否有混合模式的比較運算,或不同長度的變量間的比較運算?如果有,應確保程序能正確理解轉換規則。

3.比較運算符是否正確?程序員經常混淆“至多”、“至少”、“大于”、“不小于”、“小于”和“等于”等比較關系。

4.每個布爾表達式所敘述的內容是否都正確?在編寫涉及“與”、“或”或“非”的表達式時,程序員經常犯錯。

5.布爾運算符的操作數是否是布爾類型的?比較運算符和布爾運算符是否錯誤地混在了一起?這是一類經常會犯的錯誤,這里我們描述幾個典型錯誤的例子:

·如果想判斷i是否在2~10之間,表達式2<i<10是不正確的;相反,正確的應該是(2<i)&&(i<10)。

·如果想判斷i是否大于x或y,表達式i>x||y也是不正確的,正確的應該是(i>x)||(i>y)。

·如果要比較三個數字是否相等,表達式if(a==b==c)的實際意思卻大相徑庭。

·如果需要驗證數學關系x>y>z,正確的表達式應該是figure_0037_0008

6.在二進制的計算機上,是否有用二進制表示的小數或浮點數的比較運算?由于四舍五入,以及用二進制表示十進制數的近似度,這往往是錯誤的根源。7.對于那些包含一個以上布爾運算符的表達式,賦值順序以及運算符的優先順序是否正確?也就是說,如果碰到如同(if((a==2)&&(b==2)||(c==3))的表達式,程序能否正確理解是“與”運算在先還是“或”運算在先?

8.編譯器計算布爾表達式的方式是否會對程序產生影響?例如,語句if((x==0&&(x/y)>z)對于有的編譯器來說是可接受的,因為其認為一旦“與”運算符的一側為FALSE時,另一側就不用計算;但是對于其他編譯器來說,卻可能引起一個被0除的錯誤。

主站蜘蛛池模板: 五台县| 六安市| 六安市| 天峻县| 阜新市| 高州市| 白水县| 乐亭县| 龙游县| 汨罗市| 巧家县| 沙雅县| 克拉玛依市| 建宁县| 平和县| 集贤县| 扶绥县| 喜德县| 望城县| 宁陵县| 福州市| 上虞市| 山西省| 宜兰县| 博爱县| 永春县| 布拖县| 进贤县| 喀喇沁旗| 浪卡子县| 河源市| 芒康县| 西华县| 阿勒泰市| 新安县| 安西县| 开化县| 来凤县| 洛扎县| 清河县| 太湖县|