简单二进制操作

本文通过几个简单的函数演示了如何在C语言中进行位操作,包括位的取反、设置和移动等。提供了完整的代码实现,并解释了这些操作的具体应用场景。

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

&,屏蔽码

|,设置

<<,>>左右移动

^, 两个数不同的设置为一


常用操作:因为初学,以后补充


简单函数练习:


#include <stdio.h>

unsigned invert(unsigned , int, int);
void pbin(unsigned x);
unsigned getbits(unsigned x, int p, int n);
unsigned setbits(unsigned x, int p, int n, unsigned y);

int main()
{
    unsigned x = 79;
    int p = 4, n = 4;

    x = invert(x, p, n);

    pbin(x);

    return 0;
}

//将x从p位开始的n个数求反
unsigned invert(unsigned x, int p, int n)
{
    unsigned i = 0;

    i = getbits(x, p, n);
    return setbits(x, p, n, ~i);
}


//打印二进制
void pbin(unsigned x)
{
    if(x) pbin(x/2);
    else return;
    printf("%d",x%2);
}

//将x中从第p位开始的位设置为y中最右边n位的值
unsigned setbits(unsigned x, int p, int n, unsigned y)
{
    return ((y & ~(~0<<n))<<(p+1-n)) | (x & ((~0<<(p+1)) | (~(~0<<(p+1-n)))));
}

//得到第p位开始的n位(x, 4, 3)得到4,3,2位
unsigned getbits(unsigned x, int p, int n)
{
    return (x >> (p + 1 - n)) & ~(~0 << n);
}

//右移的从左边冒出来
unsigned rightrot(unsigned x, int p) {     unsigned j = 0;
    for(; p; p--)     {         j = x & ~(~0 << 1);         x = x >> 1;         x = setbits(x, 31, 1, j);     }     return x; }

题目来自:《c程序设计语言》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值