C语言基础问题

&& 逻辑与 

|| 逻辑或

取非

& 按位与

| 按位或

^ 按位异或

交换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);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值