在各种编程语言中,可能会涉及到整型数的奇偶判断问题。各种编程语言的整型数据类型各一,以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());