C按位运算符

    科技2025-10-24  13

    按位逻辑运算符

    1.按位取反:~

    ~(10011010) //表达式 (01100101) //结果(无符号数)

    2.按位与:&

    (10010011) &(00111101) //表达式 (00010001) //结果

    3.按位或:|

    (10010011) &(00111101) //表达式 (10111111) //结果

    4.按位异或:^

    (10010011) &(00111101) //表达式 (10101110) //结果

    5.移位运算符:左移 <<;右移 >>

    number << n number乘以2的n次幂 number >> n 非负number除以2的n次幂

    6.掩码:

    所谓掩码指的是一些设置为开(1)或关(0)的位组合

    #define MASK 2 flags &= MASK;

    MASK二进制形式(00000010),执行第二条语句后,flags二进制中1号位不变,其它位都为0.

    demon1

    1.读取用户从键盘输入的整数,将该整数和一个字符串地址传递给itobs()函数,将整数转换成二进制字符串。然后函数使用移位运算符计算出正确的0和1的组合,并将其放入字符串中。 2.使用limits.h中的CHAR_BIT宏,该宏表示char中的位数。sizeof运算符返回char的大小,所以表达式 CHAR_BIT * sizeof(int)表示int类型的位数。bin_str数组的元素个数是 CHAR_BIT * sizeof(int) +1,留出一个位置给末尾的空字符。

    #include <stdio.h> #include <limits.h> //提供CHAR_BIT的定义,CHAR_BIT表示每字节的位数 char * itobs(int, char *); void show_bstr(const char *); int main() { char bin_str[CHAR_BIT * sizeof(int) + 1]; int number; puts("Enter integers and see them in binary."); puts("Non-numeric input terminates program."); while(scanf("%d", &number) == 1) { itobs(number, bin_str); printf("%d is ", number); show_bstr(bin_str); putchar('\n'); } puts("Bye!"); return 0; } char * itobs(int n, char * ps) { int i; const static int size = CHAR_BIT * sizeof(int); for(i = size - 1; i >= 0; i--, n >>= 1) ps[i] = (01 & n) + '0'; ps[size] = '\0'; return ps; } /* 4位一组显示二进制字符串 */ void show_bstr(const char * str) { int i = 0; while(str[i]) //不是一个空字符 { putchar(str[i]); if(++i % 4 == 0 && str[i]) putchar(' '); } } 输出结果: Enter integers and see them in binary. Non-numeric input terminates program. 5 5 is 0000 0000 0000 0000 0000 0000 0000 0101 567 567 is 0000 0000 0000 0000 0000 0010 0011 0111 c Bye! demon 2 本示例中利用invert_end函数将二进制后四位切换 #include <stdio.h> #include <limits.h> //提供CHAR_BIT的定义,CHAR_BIT表示每字节的位数 char * itobs(int, char *); void show_bstr(const char *); int invert_end(int num, int bits); int main() { char bin_str[CHAR_BIT * sizeof(int) + 1]; int number; puts("Enter integers and see them in binary."); puts("Non-numeric input terminates program."); while(scanf("%d", &number) == 1) { itobs(number, bin_str); printf("%d is\n", number); show_bstr(bin_str); putchar('\n'); number = invert_end(number,4); printf("Inverting the last 4 bits gives:\n"); show_bstr(itobs(number, bin_str)); putchar('\n'); } puts("Bye!"); return 0; } char * itobs(int n, char * ps) { int i; const static int size = CHAR_BIT * sizeof(int); for(i = size - 1; i >= 0; i--, n >>= 1) ps[i] = (01 & n) + '0'; ps[size] = '\0'; return ps; } /* 4位一组显示二进制字符串 */ void show_bstr(const char * str) { int i = 0; while(str[i]) //不是一个空字符 { putchar(str[i]); if(++i % 4 == 0 && str[i]) putchar(' '); } } int invert_end(int num, int bits) { int mask = 0; int bitval = 1; while(bits-- > 0) { mask |= bitval; bitval <<=1; } return num ^ mask; }
    Processed: 0.014, SQL: 8