奇偶数的判断:取余、按位与

  过去判断奇数偶数的编程习惯一直是除以2取余。最近在看高性能javascript书,也晓得了更快的判断方法,就是和1按位与。

  因为奇数的二进制表示法的最低位是1,偶数的最低位是0。那么用这个数去和1按位与,如果是奇数,那么结果就是1;偶数结果则是0。

  

<?php

$i = 1;  $j = 2;

echo $i%2 == 1;
echo $j%2 == 0;

echo ($i & 1) == 1;
echo  ($j & 1) == 0;

-

时间: 2024-10-22 18:32:24

奇偶数的判断:取余、按位与的相关文章

2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)

题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展gcd, 不是用逆元吗.. 网上还有别人的解释,没看懂,贴一下: (a / b) % m = ( a % (m*b)) / b 笔者注:鉴于ACM题目特别喜欢M=1000000007,为质数: 当gcd(b,m) = 1, 有性质: (a/b)%m = (a*b^-1)%m, 其中b^-1是b模m的逆

例题:输入身份证号码,判断你是什么生肖。switch,case练习,substring 类使用联系,会用取余

Console.WriteLine("请输入您的身份证号码"); string x = Console.ReadLine(); string year=x.Substring (6,4);//从身份证的第六位开始截取,往后截取四位,就是你的出生年份 int x1 = Convert.ToInt32(year);//把截取到年份代入到x1中, string sx = ""; switch(x1%12)//输入一个年份取余,如果假设取余为四,你能判断那年的生肖,然后根据

奇偶数判断1(if,else if语句)

public class 奇偶数判断 { public static void main(String [] args){ float s = 9f; //取单浮点型变量s,可为任意值 float h = s%2; //让s对2取余 if(h == 1) //若余数为1,则输出此数为奇数 { System.out.println(s + "的值为奇数"); } else if(h == 0) //若余数为0,则输出此数为偶数 { System.out.println(s + "

奇偶数判断2(if else+switch语句)

public class 奇偶数判断2 { public static void main(String [] agrs){ float s = 17f; //定义浮点型数据s float h = s%2; //让s对2取余数 if((h != 0)&&(h != 1)) //假设s取值不是整数和自然数 { System.out.println("s的值请取大于等于0的整数"); //则输出此内容 } else //若等于0或者1,则进行以下语句再进行判断 { swit

bjfu1238 卡特兰数取余

题目就是指定n,求卡特兰数Ca(n)%m.求卡特兰数有递推公式.通项公式和近似公式三种,因为要取余,所以近似公式直接无法使用,递推公式我简单试了一下,TLE.所以只能从通项公式入手. Ca(n) = (2*n)! / n! / (n+1)! 思想就是把Ca(n)质因数分解,然后用快速幂取余算最后的答案.不过,算n!时如果从1到n依次质因数分解,肯定是要超时的,好在阶乘取余有规律,不断除素因子即可. 最后还是擦边过,可能筛法写得一般吧,也算是题目要求太柯刻. /* * Author : ben *

POJ 3070 + 51Nod 1242 大斐波那契数取余

POJ 3070 #include "iostream" #include "cstdio" using namespace std; class matrix { public: int a[2][2]; matrix() { a[0][0]=a[1][0]=a[0][1]=1; a[1][1]=0; } }; matrix multi(matrix a,matrix b) { matrix temp; int i,j,k; for(i=0;i<2;i++)

判断奇偶数实例

隐藏行号 复制代码 ? 判断奇偶数 //判断是否为奇数和偶数 import java.util.Scanner; public class jsos { public static void main(String[] args) { System.out.print("请输入一个数字:"); Scanner i=new Scanner(System.in); int num=i.nextInt(); if (num<=0) { System.out.print("请输

leecode---09---数字,取余整除---判断一个数字是否是回文

https://leetcode.com/problems/palindrome-number/description/ 题意 判断一个数字是否是回文 分析 32132132100 /100 删去0的部分 %100 留下0的部分 代码 class Solution { public boolean isPalindrome(int x) { if (x < 0) return false; //计算到x的最高位 int div = 1; while (div * 10 <= x) { div

POJ 1745 线性和差取余判断

POJ 1745 线性和差取余判断 题目大意:每个数都必须取到,相加或相减去,问所有的方案最后的得数中有没有一个方案可以整除k 这个题目的难点在于dp数组的安排上面 其实也就是手动模仿了一下 比如 一个数,不用说,第一个数之前不用加符号就是本身,那么本身直接对K取余, 那么取17的时候有个余数为2----基础然后来了一个5,(2 + 5)对7取余为0----层层延伸 (2 - 5)对7取余为4(将取余的负数变正) 那么前2个数有余数0和4再来一个-21(0+21)对7取余为0(0-21)对7取余