&& 逻辑与
|| 逻辑或
! 取非
& 按位与
| 按位或
^ 按位异或
交换ab两个数的值,不用temp变量,只需三步
a=a^b
b=b^a
a=a^b
取一个整数a从右端开始的 4~7 位。
我们首先将a右移4位,即将a的4-7位移到最右端,成为 0~3位,
实现方法是
a>>(7-4+1) 即 a>> 4
再设置一个低4位为全1,其余各位为全0的数,这可以对一个全1的数左移4位, 使右端低4位为全0,然后求反完成:
~(0<<4)
最后将以上二者作&运算即可:
a>>4&~(~0<<4)
#include "stdio.h"
void main( )
{ unsigned a,b,c,d;
scanf ("%d",&a);//在VC下用“%d”十进制I/O,不用“%0”
b=a>>4;
c=~(~0<<4);
d=b&c;
printf("%d\n %d\n",a,d);
}
运行情况为:
输入:331↙
显示:331 (a的值)
4 (d的值即 a 的 4~7 位的值)
设a为 16 位(两端)整数,对a 循环右移 n 位
算法描述:
① 将a的右端n位(低n位)放到b的左端位(高n位)中:b=a<<(16-n);
② 将a右移n位左补n位0: c=a>>n;
③ c与b按位作或运算即完成: c=c|b;
#include "stdio.h"
void main( )
{ //由于VC对%0要用%d,int为32位,所以本题暂不要求在VC下运行
unsigned a,b,c;
int n;
scanf("a=%0,n=%d",&a,&n);
b=a<<(16-n);
c=a>>n;
c=c|b;
printf("%0\n %0\n",a,c);
}