基本数据类型使用注意事项
生活随笔
收集整理的這篇文章主要介紹了
基本数据类型使用注意事项
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數值(文字常量),整數,浮點數,字符,字符串,布爾變量,枚舉類型,數組這些基本數據類型的使用注意事項:
(一)數值
(1)避免使用"神秘數值".
神秘數值是程序中出現的,沒有經過解釋的數值文字常量,如100,122。
可以用定義常量和全局變量的方法來代替神秘數值。
例如:
#define MAX 100
const int MAX = 100;
(2)預防除零錯誤
在除法的時候要考慮表達式的分母是否有可能為0。
(二)整數
(1)檢查整數除法
例如:
7/10他不等于0.7,而是0,或者等于負無窮大。
在現實世界里10*(7/10) = (10*7)/10 = 7,但在整數運算中卻不同。10*(7/10) = 0。
(2)整數溢出
在做整數乘法和加法的時候容易出現這種情況。
避免整數溢出的最簡單方法是考慮算術表達式中的每個項,設想每個項的最大值,預料出結果。
(3)中間結果溢出
例如:
int a = 1000000;
int b = 1000000;
int product = a * b / 1000000;
結果是product = -727;是不是跟預想的結果不一樣。問題是出現在a * b這里,a * b的結果就已經大于了整數的最大取值范圍。
(三)浮點數
(1)避免相差很大的兩個浮點數相加減
例如:
1000000.00 + 0.1 可能等于的是1000000.00,因為32位不能給你足夠的有效位數包容1000000和0.1之間的數值區間。
(2)避免等量判斷
很多應該相等的浮點數值并不一定相等。
例如:
C#代碼
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? double nominal = 1.0;
??????????? double sum = 0.0;
??????????? for (int i = 0; i < 10; i++)
??????????? {
??????????????? sum += 0.1;
??????????? }
??????????? if (nominal == sum)
??????????? {
??????????????? Console.WriteLine("same");
??????????? }
??????????? else
??????????? {
??????????????? Console.WriteLine("differnt");
??????????? }
??????? }
??? }
}
這段程序的結果是different。
(3)舍入誤差問題
解決方案:
1.使用精確度更高的變量類型。
2.換用二進制編碼的十進制變量。
3.把浮點變量變成整型變量。
(四)字符和字符串
(1)不要使用神秘字符和字符串。
(2)訪問字符串時避免溢出。
(3)知道你的語言和開發環境如何支持Unicode.
(五)布爾變量
(1)用布爾變量對程序加以文檔說明
例如:
if ((elementIndex < 0) || (MAX_ELEMENTS < elementIndex) || (elementIndex == lastElementIndex))
{.....}
這段代碼布爾判斷目的不明確,如果該成下面這樣就比較明確了。
bool finished = (elementIndex < 0) || (MAX_ELEMENTS < elementIndex);
bool repeatedEntry = (elementIndex == lastElementIndex);
if (finished || repeatedEntry ){....}
(六)枚舉類型
(1)枚舉可以提高可讀性。
例如:
if (color == 1)
if (color == Color_red)
相比之下第二條語句可讀性就高。
(2)枚舉可以提高可靠性。
使用枚舉使編譯器執行很嚴格的類型檢查。
例如:
??? enum Color
??? {
??????? Color_red,
??????? Color_blue,
??????? Color_black,
??? };
聲明了一個枚舉類型Color,如果聲明了一個Color類型的變量c,編譯器只能允許Color_red,Color_blue,Color_black這3個值付給c。
(3)枚舉可以簡化修改。
就拿上邊的Color來說吧,如果以后程序想添加一些顏色只需往列表中增加元素即可,編譯以后就可以運行了。
(七)數組
(1)確認所有數組下標都沒有超出數組的邊界。
(2)如果數組是多維的,確認下標使用順序的正確的。
(3)提防下標串換串話。
這種情況出現在使用嵌套循環的時候,不要把Array[i]寫成Array[j]。
以上是我看過資料自己整理出來的結果,如有不對希望大家指出來。如果不全請大家跟貼補充上來。
(一)數值
(1)避免使用"神秘數值".
神秘數值是程序中出現的,沒有經過解釋的數值文字常量,如100,122。
可以用定義常量和全局變量的方法來代替神秘數值。
例如:
#define MAX 100
const int MAX = 100;
(2)預防除零錯誤
在除法的時候要考慮表達式的分母是否有可能為0。
(二)整數
(1)檢查整數除法
例如:
7/10他不等于0.7,而是0,或者等于負無窮大。
在現實世界里10*(7/10) = (10*7)/10 = 7,但在整數運算中卻不同。10*(7/10) = 0。
(2)整數溢出
在做整數乘法和加法的時候容易出現這種情況。
避免整數溢出的最簡單方法是考慮算術表達式中的每個項,設想每個項的最大值,預料出結果。
(3)中間結果溢出
例如:
int a = 1000000;
int b = 1000000;
int product = a * b / 1000000;
結果是product = -727;是不是跟預想的結果不一樣。問題是出現在a * b這里,a * b的結果就已經大于了整數的最大取值范圍。
(三)浮點數
(1)避免相差很大的兩個浮點數相加減
例如:
1000000.00 + 0.1 可能等于的是1000000.00,因為32位不能給你足夠的有效位數包容1000000和0.1之間的數值區間。
(2)避免等量判斷
很多應該相等的浮點數值并不一定相等。
例如:
C#代碼
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? double nominal = 1.0;
??????????? double sum = 0.0;
??????????? for (int i = 0; i < 10; i++)
??????????? {
??????????????? sum += 0.1;
??????????? }
??????????? if (nominal == sum)
??????????? {
??????????????? Console.WriteLine("same");
??????????? }
??????????? else
??????????? {
??????????????? Console.WriteLine("differnt");
??????????? }
??????? }
??? }
}
這段程序的結果是different。
(3)舍入誤差問題
解決方案:
1.使用精確度更高的變量類型。
2.換用二進制編碼的十進制變量。
3.把浮點變量變成整型變量。
(四)字符和字符串
(1)不要使用神秘字符和字符串。
(2)訪問字符串時避免溢出。
(3)知道你的語言和開發環境如何支持Unicode.
(五)布爾變量
(1)用布爾變量對程序加以文檔說明
例如:
if ((elementIndex < 0) || (MAX_ELEMENTS < elementIndex) || (elementIndex == lastElementIndex))
{.....}
這段代碼布爾判斷目的不明確,如果該成下面這樣就比較明確了。
bool finished = (elementIndex < 0) || (MAX_ELEMENTS < elementIndex);
bool repeatedEntry = (elementIndex == lastElementIndex);
if (finished || repeatedEntry ){....}
(六)枚舉類型
(1)枚舉可以提高可讀性。
例如:
if (color == 1)
if (color == Color_red)
相比之下第二條語句可讀性就高。
(2)枚舉可以提高可靠性。
使用枚舉使編譯器執行很嚴格的類型檢查。
例如:
??? enum Color
??? {
??????? Color_red,
??????? Color_blue,
??????? Color_black,
??? };
聲明了一個枚舉類型Color,如果聲明了一個Color類型的變量c,編譯器只能允許Color_red,Color_blue,Color_black這3個值付給c。
(3)枚舉可以簡化修改。
就拿上邊的Color來說吧,如果以后程序想添加一些顏色只需往列表中增加元素即可,編譯以后就可以運行了。
(七)數組
(1)確認所有數組下標都沒有超出數組的邊界。
(2)如果數組是多維的,確認下標使用順序的正確的。
(3)提防下標串換串話。
這種情況出現在使用嵌套循環的時候,不要把Array[i]寫成Array[j]。
以上是我看過資料自己整理出來的結果,如有不對希望大家指出來。如果不全請大家跟貼補充上來。
轉載于:https://www.cnblogs.com/spnider/archive/2006/07/25/459262.html
總結
以上是生活随笔為你收集整理的基本数据类型使用注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sqlserver 优化的方法
- 下一篇: .Net下的HashTable