宏定义与位运算

实例:用宏定义实现值互换
试定义一个带参数的宏swap(a,b)以实现两个整数之间的交换,并利用它将一维数组a和b的值互换。
(注:宏定义不能换行)
代码:
#include<stdio.h>
#define swap(a,b){int c;c = a;a = b;b =c;}
int main()
{
int i,j,a[10],b[10];
printf("数组a:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("数组b:");
for(i=0;i<10;i++)
scanf("%d",&b[i]);
for(i=0;i<10;i++)
swap(a[i],b[i]);
printf("交换后\n数组a:");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n数组b:");
for(i=0;i<10;i++)
printf("%d ",b[i]);
return 0;
}


实例:普通的位运算
当a=2、b=4、c=6、d=8时编程求a&c、b|d、a^d、~a的值。
代码:
#include<stdio.h>
int main()
{
int a,b,c,d;
a=2,b=4,c=6,d=8;
result = ~a;
printf("%u %u %u %u",a&c,b|d,a^d,~a);
return 0;
}


实例:循环移位

编程实现循环移位,具体要求如下:首先从键盘中输入一个八进制数,其次再输入要移位的位数(当为正数时表示向右循环移位,否则表示向左循环移位,最后将结果显示在屏幕上。

代码:

#include<stdio.h>
int main() 
{
unsigned right(unsigned value,int n);
unsigned left(unsigned value,int n);
unsigned a;
int n;
scanf("%o",&a);
scanf("%d",&n);
if(n>0)
{
printf("%o",right(a,n));
}
else
{
n = -n;
printf("%o",right(a,n));
}
return 0;



unsigned right(unsigned value,int n)
{
unsigned z;
z = (value>>n)|(value<<(16-n));
return z;
}


unsigned left(unsigned value,int n)
{
unsigned z;
z = (value<<n)|(value>>(16-n));
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值