简单二进制操作

来源:互联网 发布:泰坦尼克号真相 知乎 编辑:程序博客网 时间:2024/06/05 21:55

&,屏蔽码

|,设置

<<,>>左右移动

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


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


简单函数练习:


#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程序设计语言》

原创粉丝点击