首页 > 编程知识 正文

程序员可以查到什么(函数的奇偶性计算视频)

时间:2023-05-04 07:26:49 阅读:101548 作者:3780

众所周知,在整数中,能被2等分的数叫偶数,不能被2等分的数叫奇数。因此,判断一个数的奇偶性,我们总是用2除,看是否有余数。那么有没有更先进的方法呢?

学过计算机二进制的朋友应该都知道or (|),and(),non(!),如0 | 0=0,00=0,0| 1=1,01=0,1| 1=1,11=1。在任何奇数二进制表示中,第一位必须是1,例如,二进制3是00000011,二进制5是0000101,二进制7是0000111。相反,偶数的第一位必须是0,所以如果是偶数,结果必须是0,例如偶数2,000,001。那么,我们可以据此判断。

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

直接粘贴代码:

公共类MyTest {

/**

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

* @param计数执行次数

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

*/

公共静态void比较(int count,int NumberSize){ 0

long tt1=long . value of(0);

long tt2=long . value of(0);

设置数字集;

for(int I=0;我数;I){ 0

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

number set=random number(NumberSize);

system . out . println(" th "(I ^ 1)"第次执行:");

long t1=system . CurrentMemillis();

法官编号(号码集);

long T2=system . CurrentMemillis();

tt1=(T2-t1);

long T3=system . CurrentMemillis();

法官编号1(数字集);

long T4=system . CurrentMemillis();

tt2=(T4-T3);

}

System.out.println (' nAverage第一个方法的时间:“(float)tt1/count ' ms ');

System.out.println("第二种方法的平均时间:"(浮点)tt2/计数毫秒");

}

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

公共静态SetInteger randomNumber(int NumberSize){ 0

Random Random=new Random();

int n=0;

SetInteger number set=new HashSet();

for(int I=0;I整数。最大值;I){ 0

if(NumBerSet . SiZe)(NumBerSiZe){ 0

number set . add(random . nextint());

} else {

打破;

}

}

返回数字集;

}

//判断奇偶数

公共静态无效法官人数(设置整数人数设置){ 0

int n1=0,N2=0;

for(整数: numberset){ 0

if((数字0x 01)==0){ 0

n1;

} else {

N2;

}

}

System.out.println("第一种方法偶数的个数是:" + n1 + "tt奇数的个数是:" + 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 + "tt奇数的个数是:" + 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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。