【C语言】lesson1移位三道题

本文提供了三种位操作练习:交换高低四位、交换奇偶位以及循环移位,并给出了两种实现方法,帮助读者理解位运算的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作业:

1、输入一个字节内的数(0~255),然后将该数转换为二进制数,然后将高四位和低四位互换

方法一:

int main(int argc, const char * argv[])
{
/*
//1.
int n,a1,a2,a3,a4,a5,a6,a7,a8,c,w;
printf("1.请输出一个整数(0~255):");
scanf("%d",&n);
a8=n%2;
a7=n/2%2;
a6=n/2/2%2;
a5=n/2/2/2%2;
a4=n/2/2/2/2%2;
a3=n/2/2/2/2/2%2;
a2=n/2/2/2/2/2/2%2;
a1=n/2/2/2/2/2/2/2%2;
printf("该数转换为二进制为:%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);
int c1=n&15;
int c2=c1<<4;
int c3=n>>4;
c=c2|c3;
a8=c%2;
a7=c/2%2;
a6=c/2/2%2;
a5=c/2/2/2%2;
a4=c/2/2/2/2%2;
a3=c/2/2/2/2/2%2;
a2=c/2/2/2/2/2/2%2;
a1=c/2/2/2/2/2/2/2%2;
printf("将高四位和低四位互换后为:%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);

方法二:

unsigned char left=num<<4;
unsigned char right=num>>4;
unsigned char result=left|right;

2.输入一个字节的整数(0~255),然后将该数转换为二进制数,然后将奇数位和偶数位互换

方法一:

printf("2.请输出一个整数(0~255):");
    scanf("%d",&n);
    a8=n%2;
    a7=n/2%2;
    a6=n/2/2%2;
    a5=n/2/2/2%2;
    a4=n/2/2/2/2%2;
    a3=n/2/2/2/2/2%2;
    a2=n/2/2/2/2/2/2%2;
    a1=n/2/2/2/2/2/2/2%2;
    printf("该数转换为二进制为:%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);
    w=((n&170)>>1)|((n&85)<<1);
    a8=w%2;
    a7=w/2%2;
    a6=w/2/2%2;
    a5=w/2/2/2%2;
    a4=w/2/2/2/2%2;
    a3=w/2/2/2/2/2%2;
    a2=w/2/2/2/2/2/2%2;
    a1=w/2/2/2/2/2/2/2%2;
    printf("奇数和偶数互换后为:%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);</span>
方法二:

unsigned char left=num<<1;
unsigned char right=num>>1;
unsigned char result=(left&170)|(right&85);

3.输入一个字节内的数(0~255)和移动位数。输出移位结果(要求循环移位)。提示:系统自带的移位都是非循环的。

方法一:

unsigned char a,b;
    int i,move,x,y;
    printf("请输入一个整数和所移动的个数:\n");
    scanf("%d%d",&i,&move);
    a=(char)i;
    x=a>>move;
    y=a<<(8-move); 
    b=x|y;
    printf("%u\n",b);
 */   
    int number1;
    printf("输入一个0~255之内的整数:");
    scanf("%d",&number1);
    //通过强制类型转换将整型转换成无符号字符型,表示一个字节内的数,并且是8位二进制位
    unsigned char num =(unsigned char)number1; </span>

方法二:

printf("请输入一个循环次数:");

    int n;
    scanf("%d",&n);
    unsigned char right=num>>n;
    unsigned char left=num<<(8-n);
    unsigned char result=left|right;   

    printf("result=%d\n",result);
    return 0;

}</span>
文章转载至:http://blog.youkuaiyun.com/li565844638/article/details/34800527




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值