在各種程式設計語言中,可能會涉及到整型數的奇偶判斷問題。各種程式設計語言的整型資料類型各一,以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());