C语言从头学10——位运算符

位运算是计算机知识中最为基础的内容。C语言提供了一些位运算符用来进行二进制位的操作。位操作的操作数不要求必须是二进制数,各种进制均可,因为在底层所有的数都是二进制的。

1、"~" 取反运算符

取反 "~" 运算符是一个一元运算符,用于将一个数的每一个二进制位变成相反值,即0变1,1变0。举一个例子,由于C语言不能直接显示二进制数,我们用16进制显示。

int a=0b10101010; //这个数如果用16进制表示是AA

printf("对a取反16进制显示%x",~a); //运算结果:55 (16进制)

我们知道,16进制的55写成二进制就是01010101,正好是把每个位上的0转变成了1。

至于怎样将二进制用printf()显示出来,等学习完编写函数后容易做到。

2、"&" 与运算符

与运算符 "&" 将两个值的每一个二进制位依次比较,结果返回一个新的值。两个二进制位同时为1就返回 1 ,否则返回 0 。例如:

10010011 & 10111101 // 返回 10010001

3、"|"或运算符

或运算符 "|" 将两个值的每一个二进制位进行比较,结果返回一个新的值。两个二进制位只要有一个为 1 就返回 1,否则返回 0 。例如:

10010011 | 00111100 //返回 10111111

4、"^" 异或运算符

异或运算符 "^" 将两个值的每一个二进制位进行比较,结果返回一个新的值。两个二进制位有且仅有一个为 1返回 1 ,其它情况都返回 0 。例如:

10010011 ^ 00111101 // 返回 10101110

5、"<<" 左移运算符

将左侧运算数的每一位,向左移动指定的位数,尾部空出来的位置使用 0 填充。例如:

10001010 << 2 // 结果:1000101000

说明:a.这里面有一个问题需要注意,左移时如果左边没有空位,那么左边缺少几个空位就会有几位被截去。b.左移运算相当于将运算数乘以2的指定次方,比如左移2位就相当于乘以4(2的2次方)。

6、">>" 右移运算符

将左侧运算数的每一位,向右移动指定的位数,尾部会有指定位数因无法容纳将丢弃,头部空出来的位置用0补齐。

10001011 >> 2 // 返回 00100010

右移运算符相当于将运算数除以2的指定次方。比如右移2位就相当于除以4(2的2次方)。

举一个左移2位和右移2的例子:

cpp 复制代码
#include<stdio.h>
int main(void)
{
    int x = 2;
    int y = x << 2; //对x进行左移2位运算(相当于乘以2^2)
    printf("%x\n", y); //运行结果:8
    x = 8;
    y = x >> 2; //对x进行右移2位运算(相当于除以2^2)
    printf("%x\n", y); //运行结果:2
    getchar();
    return 0;
}
相关推荐
艾莉丝努力练剑5 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
Cx330❀6 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
..过云雨7 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
谱写秋天9 小时前
在STM32F103上进行FreeRTOS移植和配置(STM32CubeIDE)
c语言·stm32·单片机·freertos
我不是板神9 小时前
程序设计|C语言教学——C语言基础2:计算与控制语句
c语言
基于python的毕设9 小时前
C语言栈的实现
linux·c语言·ubuntu
promising-w13 小时前
【嵌入式C语言】六
c语言·开发语言
ankleless14 小时前
C语言(11)—— 数组(超绝详细总结)
c语言·零基础·数组·二维数组·自学·一维数组
草莓熊Lotso15 小时前
《吃透 C++ 类和对象(中):const 成员函数与取地址运算符重载解析》
c语言·开发语言·c++·笔记·其他
野生的编程萌新17 小时前
从冒泡到快速排序:探索经典排序算法的奥秘(二)
c语言·开发语言·数据结构·c++·算法·排序算法