当前位置:首页 > 体育 >

8.5是偶数吗

来源:原点资讯(www.yd166.com)时间:2023-11-01 21:21:51作者:YD166手机阅读>>

我们都知道,在整数中,能够被2整除的数称作偶数,不能被2整除的数称作奇数。因此判断一个数的奇偶性我们都是拿它除以2,看是否有余数来确定。那么有没有一种更高级一点的方法呢?

学过计算机二进制的朋友们应该都知道或(|)、与(&)、非(!)的概念,比如0|0=0,0&0=0,0|1=1,0&1=0,1|1=1,1&1=1。而任何一个奇数的二进制表示形式,第一位肯定是1,比如3的二进制是00000011,5的二进制是00000101,7的二进制是00000111,相反偶数的第一位肯定是0,因此拿这个数和00000001相与,如果是偶数,则结果必是0,比如偶数2,00000010&00000001,结果是0。那么,我们就可以基于这一点来进行判断了。

8.5是偶数吗,(1)

可能有人会说,这有什么用,把简单问题复杂化根本没有意义。其实对于我们人来说,确实意义不大,但是对于计算机来说意义很大,因为计算机内部的算法就是这样,即使我们用数字除以2来判断,编译后计算机还是会这么算。所以,我们直接跳过中间这一步,直接用&方法来判断,则能省下一个步骤,对于大量运算的计算机来说,还是很有实际意义的。为此,我还专门写了一个程序,看看两种算法下计算1000次、10000次、100000次甚至1000000次所花费的时间,代码如下。

直接贴代码:

public class MyTest {

/**

* 比较两种判断奇偶数方法的执行效率

* @param count 执行次数

* @param numberSize 生成随机数的个数

*/

public static void compare(int count, int numberSize) {

Long tt1 = Long.valueOf(0);

Long tt2 = Long.valueOf(0);

Set numberSet;

for(int i = 0; i < count; i ) {

// 获取指定个数的随机数

numberSet = randomNumber(numberSize);

System.out.println(“第” (i 1) “次执行:”);

Long t1 = System.currentTimeMillis();

judgeNumber(numberSet);

Long t2 = System.currentTimeMillis();

tt1 = (t2 - t1);

Long t3 = System.currentTimeMillis();

judgeNumber1(numberSet);

Long t4 = System.currentTimeMillis();

tt2 = (t4 - t3);

}

System.out.println("\n第一种方法平均耗时:" (float) tt1/count " ms");

System.out.println(“第二种方法平均耗时:” (float) tt2/count " ms");

}

// 生成指定个数的随机数

public static Set<Integer> randomNumber(int numberSize) {

Random random = new Random();

int n = 0;

Set<Integer> numberSet = new HashSet<>();

for (int i = 0; i < Integer.MAX_VALUE; i ) {

if (numberSet.size() < numberSize) {

numberSet.add(random.nextInt());

} else {

break;

}

}

return numberSet;

}

// 判断奇偶数

public static void judgeNumber(Set<Integer> numberSet) {

int n1 = 0,n2 = 0;

for (Integer number:numberSet) {

if ((number & 0x01) == 0) {

n1 ;

} else {

n2 ;

}

}

System.out.println("第一种方法偶数的个数是:" n1 "\t\t奇数的个数是:" n2);

}

// 判断奇偶数

public static void judgeNumber1(Set<Integer> numberSet) {

int n1 = 0,n2 = 0;

for (Integer number:numberSet) {

if ((number % 2) == 0) {

n1 ;

} else {

n2 ;

}

}

System.out.println("第二种方法偶数的个数是:" n1 "\t\t奇数的个数是:" n2);

}

public static void main(String[] args) {

compare(10, 1000000);

}

}

首先我判断一千次的耗时,执行十次,算出平均耗时,结果如下:

第1次执行:

第一种方法偶数的个数是:519 奇数的个数是:481

第二种方法偶数的个数是:519 奇数的个数是:481

第2次执行:

第一种方法偶数的个数是:512 奇数的个数是:488

第二种方法偶数的个数是:512 奇数的个数是:488

第3次执行:

第一种方法偶数的个数是:486 奇数的个数是:514

第二种方法偶数的个数是:486 奇数的个数是:514

第4次执行:

第一种方法偶数的个数是:500 奇数的个数是:500

第二种方法偶数的个数是:500 奇数的个数是:500

第5次执行:

第一种方法偶数的个数是:482 奇数的个数是:518

第二种方法偶数的个数是:482 奇数的个数是:518

第6次执行:

第一种方法偶数的个数是:506 奇数的个数是:494

第二种方法偶数的个数是:506 奇数的个数是:494

第7次执行:

第一种方法偶数的个数是:478 奇数的个数是:522

第二种方法偶数的个数是:478 奇数的个数是:522

第8次执行:

第一种方法偶数的个数是:528 奇数的个数是:472

第二种方法偶数的个数是:528 奇数的个数是:472

第9次执行:

第一种方法偶数的个数是:496 奇数的个数是:504

第二种方法偶数的个数是:496 奇数的个数是:504

第10次执行:

第一种方法偶数的个数是:514 奇数的个数是:486

第二种方法偶数的个数是:514 奇数的个数是:486

第一种方法平均耗时:1.6 ms

第二种方法平均耗时:1.0 ms

然后我判断一万次的耗时,执行十次,算出平均耗时,结果如下:

第1次执行:

第一种方法偶数的个数是:4946 奇数的个数是:5054

第二种方法偶数的个数是:4946 奇数的个数是:5054

第2次执行:

第一种方法偶数的个数是:4936 奇数的个数是:5064

第二种方法偶数的个数是:4936 奇数的个数是:5064

第3次执行:

第一种方法偶数的个数是:4977 奇数的个数是:5023

第二种方法偶数的个数是:4977 奇数的个数是:5023

第4次执行:

第一种方法偶数的个数是:5004 奇数的个数是:4996

第二种方法偶数的个数是:5004 奇数的个数是:4996

第5次执行:

第一种方法偶数的个数是:5072 奇数的个数是:4928

第二种方法偶数的个数是:5072 奇数的个数是:4928

第6次执行:

第一种方法偶数的个数是:4914 奇数的个数是:5086

第二种方法偶数的个数是:4914 奇数的个数是:5086

第7次执行:

第一种方法偶数的个数是:4962 奇数的个数是:5038

第二种方法偶数的个数是:4962 奇数的个数是:5038

第8次执行:

第一种方法偶数的个数是:5077 奇数的个数是:4923

第二种方法偶数的个数是:5077 奇数的个数是:4923

第9次执行:

第一种方法偶数的个数是:5006 奇数的个数是:4994

第二种方法偶数的个数是:5006 奇数的个数是:4994

第10次执行:

第一种方法偶数的个数是:4940 奇数的个数是:5060

第二种方法偶数的个数是:4940 奇数的个数是:5060

第一种方法平均耗时:3.5 ms

第二种方法平均耗时:2.3 ms

判断十万次的耗时,执行十次,算出平均耗时,结果如下:

第1次执行:

第一种方法偶数的个数是:49929 奇数的个数是:50071

第二种方法偶数的个数是:49929 奇数的个数是:50071

第2次执行:

第一种方法偶数的个数是:49893 奇数的个数是:50107

第二种方法偶数的个数是:49893 奇数的个数是:50107

第3次执行:

第一种方法偶数的个数是:49932 奇数的个数是:50068

第二种方法偶数的个数是:49932 奇数的个数是:50068

第4次执行:

第一种方法偶数的个数是:49898 奇数的个数是:50102

第二种方法偶数的个数是:49898 奇数的个数是:50102

第5次执行:

第一种方法偶数的个数是:50004 奇数的个数是:49996

第二种方法偶数的个数是:50004 奇数的个数是:49996

第6次执行:

第一种方法偶数的个数是:50019 奇数的个数是:49981

第二种方法偶数的个数是:50019 奇数的个数是:49981

第7次执行:

第一种方法偶数的个数是:49881 奇数的个数是:50119

第二种方法偶数的个数是:49881 奇数的个数是:50119

第8次执行:

第一种方法偶数的个数是:50004 奇数的个数是:49996

第二种方法偶数的个数是:50004 奇数的个数是:49996

第9次执行:

第一种方法偶数的个数是:49899 奇数的个数是:50101

第二种方法偶数的个数是:49899 奇数的个数是:50101

第10次执行:

第一种方法偶数的个数是:50066 奇数的个数是:49934

第二种方法偶数的个数是:50066 奇数的个数是:49934

第一种方法平均耗时:8.5 ms

第二种方法平均耗时:8.8 ms

我判断一百万次的耗时,执行十次,算出平均耗时,结果如下:

第1次执行:

第一种方法偶数的个数是:499904 奇数的个数是:500096

第二种方法偶数的个数是:499904 奇数的个数是:500096

第2次执行:

第一种方法偶数的个数是:500172 奇数的个数是:499828

第二种方法偶数的个数是:500172 奇数的个数是:499828

第3次执行:

第一种方法偶数的个数是:499950 奇数的个数是:500050

第二种方法偶数的个数是:499950 奇数的个数是:500050

第4次执行:

第一种方法偶数的个数是:499937 奇数的个数是:500063

第二种方法偶数的个数是:499937 奇数的个数是:500063

第5次执行:

第一种方法偶数的个数是:499896 奇数的个数是:500104

第二种方法偶数的个数是:499896 奇数的个数是:500104

第6次执行:

第一种方法偶数的个数是:499992 奇数的个数是:500008

第二种方法偶数的个数是:499992 奇数的个数是:500008

第7次执行:

第一种方法偶数的个数是:500145 奇数的个数是:499855

第二种方法偶数的个数是:500145 奇数的个数是:499855

第8次执行:

第一种方法偶数的个数是:499907 奇数的个数是:500093

第二种方法偶数的个数是:499907 奇数的个数是:500093

第9次执行:

第一种方法偶数的个数是:499958 奇数的个数是:500042

第二种方法偶数的个数是:499958 奇数的个数是:500042

第10次执行:

第一种方法偶数的个数是:500116 奇数的个数是:499884

第二种方法偶数的个数是:500116 奇数的个数是:499884

第一种方法平均耗时:59.7 ms

第二种方法平均耗时:70.7 ms

可以看到,当判断次数为一千次和一万次的时候,第一种方法甚至比第二种方法耗时更久,直到判断次数达到十万次的时候,第一种方法的优势才开始慢慢显露出来,判断一百万次的时候直接耗时少了十多毫秒。

8.5是偶数吗,(2)

栏目热文

17.2是偶数吗

17.2是偶数吗

福彩双色球第2022058期奖号为:06、13、14、23、31、33 01。当期红球奇偶比为4:2,蓝球开出奇数号码。...

2023-11-01 20:56:22查看全文 >>

37是不是整数(25是质数吗)

37是不是整数(25是质数吗)

接上文,十位数相同、个位数相加得10的两位数乘法。这种类型还有第二个类型:两位数平方速算法。例题:23²=?1、找出该两...

2023-11-01 21:22:49查看全文 >>

22是偶数吗(偶数有哪些数字)

22是偶数吗(偶数有哪些数字)

考研中的”行话”有很多,“水区”、“旱区”、"大年"、"小年"等等。“大小年”这个现象确...

2023-11-01 21:08:47查看全文 >>

46算偶数吗(0算偶数不)

46算偶数吗(0算偶数不)

洛书的横竖十变与撇捺乂变【作者:赵致生(1943-2021),一共85篇】洛书的十、乂两式,一个是三横三竖之中横中竖产生...

2023-11-01 21:18:37查看全文 >>

35是奇数吗(40是奇数吗)

35是奇数吗(40是奇数吗)

提高中大奖的几率,无非就是前文所讲的这些学问的一种延伸和运用,我用自己的亲身经历来进行下一步的说明。时间大概是在零三年的...

2023-11-01 21:16:20查看全文 >>

win7重装系统后没有本地连接(windows7旗舰版如何重装系统)

win7重装系统后没有本地连接(windows7旗舰版如何重装系统)

很多用户在使用win11系统时发现自己的网络连接没有了,遇到这种情况的话,我们应该怎么处理呢?我们可以尝试打开网络图标,...

2023-11-01 20:51:44查看全文 >>

win7系统重装后没有网络怎么办(win7系统重装u盘)

win7系统重装后没有网络怎么办(win7系统重装u盘)

本文主要介绍了离线重装系统的操作方法,它可以帮助用户在没有网络的情况下重装系统,从而节省时间和精力,提高工作效率。工具...

2023-11-01 21:02:12查看全文 >>

win7原版重装系统没有本地连接(原版win7重装系统文件哪里找)

win7原版重装系统没有本地连接(原版win7重装系统文件哪里找)

电脑重置是指将电脑的系统和设置恢复到初始状态,从而解决一些系统问题或提高电脑的性能。电脑重置有两种方式:云下载和本地重新...

2023-11-01 20:55:33查看全文 >>

手机卡3g升4g到哪里升(3g手机卡如何升4g)

手机卡3g升4g到哪里升(3g手机卡如何升4g)

又是一年世界电信日,本次电信日的主题是“在充满挑战的时代加速数字化转型”。5G商用以来,为世界带来有目共睹的改变,还将在...

2023-11-01 20:55:16查看全文 >>

手机卡还是3g的怎么升级4g(怎么把2g手机卡升为4g)

手机卡还是3g的怎么升级4g(怎么把2g手机卡升为4g)

阅读此文前,麻烦您点击一下“关注”,既方便您进行讨论与分享,还能为您带来不一样的参与感,感谢您的支持。随着5G时代的到来...

2023-11-01 21:32:50查看全文 >>

文档排行