使用位运算实现判断一个数是否是2的n次方,实现不需要中间变量进行两个变量值的交换
2017-04-10 22:03
656 查看
1.按位取反,将每个0变成1,每个1变成0
char ch=’a’;
char ch2=~a;
2.位与,两个操作数的对应位数都是1时,结果才为1.
int a=0,b=1;
int c=a&b;
3.位或,两个操作数的对应位数,只要有一个是1,结果就为1
int a=1,b=2;
int c=a|b;
4.位异或,两个操作数的对应位数相同则为0,不同则为1
int a=0,b=1;
int c=a^b;
5.左移运算符,将其左侧操作数的值的每位向左移动,移动的位数由其操作数指定。空出来的位用0填充,并且丢弃移出左侧操作数末端的位。
a=b<<2;
6.右移运算符
将其左侧的操作数的值每位向右移动,移动的位数由其右侧的操作数指定。对于unsigned类型,用0填充左端空出的位。对于有符号类型,结果依赖环境,空出的位可能用0填充,或者使用符号位的副本填充。
交换两个数,不需要临时变量
void test()
{
int a,b;
a=a^b;
b=b^a;
a=a^b;
}
判断一个数是否是2的n次方
bool test(int n)
{
return !(n&(n-1));
}
char ch=’a’;
char ch2=~a;
2.位与,两个操作数的对应位数都是1时,结果才为1.
int a=0,b=1;
int c=a&b;
3.位或,两个操作数的对应位数,只要有一个是1,结果就为1
int a=1,b=2;
int c=a|b;
4.位异或,两个操作数的对应位数相同则为0,不同则为1
int a=0,b=1;
int c=a^b;
5.左移运算符,将其左侧操作数的值的每位向左移动,移动的位数由其操作数指定。空出来的位用0填充,并且丢弃移出左侧操作数末端的位。
a=b<<2;
6.右移运算符
将其左侧的操作数的值每位向右移动,移动的位数由其右侧的操作数指定。对于unsigned类型,用0填充左端空出的位。对于有符号类型,结果依赖环境,空出的位可能用0填充,或者使用符号位的副本填充。
交换两个数,不需要临时变量
void test()
{
int a,b;
a=a^b;
b=b^a;
a=a^b;
}
判断一个数是否是2的n次方
bool test(int n)
{
return !(n&(n-1));
}
相关文章推荐
- 输入任意大小的三个整数,判断其中是否有两个奇数一个偶数。若是,则输出“YES”,不是则输出“NOT” (要求用条件表达式进行判断,不使用if语句)
- JavaSE7基础 使用位运算异或 进行两个变量的数值交换
- shell脚本使用两个数组,判断一个变量是否在数组里面的例子
- java实现两个变量值交换不使用第三个变量
- 使用位运算判断一个数是否为2的N次方
- 在进行C#编程时候,有的时候我们需要判断一个字符串是否是数字字符串,我们可以通过以下两种方法来实现。 【方法一】:使用 try{} catch{} 语句。 我们可以在try语句块中试图
- 不使用临时变量,实现两个变量值的交换
- a ^= b ^= a ^= b看到了一个不需要中间变量交换两个的得方法
- 不使用第三个变量,实现两个变量值的交换
- 如何将a,b的值进行交换,并且不使用任何中间变量
- 不使用额外空间实现两个变量(int 型)的交换
- 使用异或实现两个数的换位,不需要中间变量,提高效率
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- 交换两个变量值,但不使用第三个变量的算法
- 不使用第三个变量,实现交换两个变量的值
- 变量交换 如果要把两个整型变量a、b的值交换,一般要采用一个中间变量做过渡, 但也可以在不借助任何其它变量的情况下完成。
- 不使用中间变量,实现两个变量值的交换
- 1.4 写一个函数判断两个字符串是否使用相同的字符构成。
- 有两个变量a,b,不使用任何中间变量交换它们
- JAVA--第十周作业编写之一个Teacher类负责给出算术题目,随机给出两个整数并进行运算,并判断回答者的答案是否正确;编写一个GUI类ComputerFrame,回答者可以通过GUI看到题目并给出