在各種編程語言中,可能會涉及到整型數的奇偶判斷問題。各種編程語言的整型數據類型各一,以C#為例,整型有byte,short(ushort為無符號型,後續類型類推),int,long等類型。
我們知道,能被2整除是偶,否則是奇。所以判斷的方法有2,第一種是用被判斷的數據與1按位與,如果結果是1,則是奇,否則為偶。
第二種是用被判斷的數據除以2,餘數為1則為奇,否則為偶(整除取餘運行叫取模)。
以C#為例,假設要判斷的數據為v,則第一種方式的代碼為
bool isOdd = ((v & 1) == 1);
第二種方式的代碼為
bool isOdd = ((v % 1) == 1);
我以為按位與的結果要高於取模運行。結果出乎我的意料!
看結果:
所以還是要以實際結果為證。
測試代碼如下:
Stopwatch sw = new Stopwatch();
StringBuilder sb = new StringBuilder();
int count = 10000000;
sw.Start();
for(int i = 0; i < count; i++)
{
bool a = ((i & 1) ==1);
}
sw.Stop();
sb.Append("按位與用時:").Append(sw.Elapsed.TotalMilliseconds);
sw.Restart();
for (int i = 0; i < count; i++)
{
bool a = ((i % 1) == 1);
}
sw.Stop();
sb.Append("取餘用時:").Append(sw.Elapsed.TotalMilliseconds);
MessageBox.Show(sb.ToString());