C语言从入门到精通学习第6天(位运算的基本操作)

这篇具有很好参考价值的文章主要介绍了C语言从入门到精通学习第6天(位运算的基本操作)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

位运算概述

程序中所有的数在计算内存中都是以二进制的形式存储的,位运算是指按二进制进行的运算,位运算的运算速度通常与加法运算相同(仍快于乘法运算),但通常功耗较小,因为资源使用比较小。

在软件开发的过程中,常常要处理二进制的问题,例如:

  • 通过子网掩码求IP地址的网络号
  • 通过异或对数据进行加密
  • 通过单片机、STM32等控制灯光、风扇等
  • 通过位运算判断数据的奇偶性

任何二进制位的表示都从右侧(最低位)开始计数,向左进。例如:二进制值0001(十进制1)除第一位(即最右边)每位上都是0。

位运算符

运算符 作用
& 按位与操作,按二进制位进行“与”运算
按位或运算符,按二进制位进行”或“运算
~ 按位取反运算符,按二进制位进行”取反“运算
^ 异或运算符,按二进制位进行“异或”运算
<< 二进制左移运算符,将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边的补0)
>> 二进制右移运算符,将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃

下面分别对其进行说明:

  • 取反(~)
    取反是一元运算符,对一个二进制数的每一位执行逻辑反操作。使数字1成为0,0成为1。如正数~ 00000001 = 11111110。负数有一定的难度这里就不过多的说明了,有兴趣的同学可以自学一下。

  • 按位与(&)
    与运算符通常用于二进制的取位操作,相同位的两个数字都为1,则为1;若有一个不为1,则为0。如00000011 & 00000001 = 00000001

  • 按位或(or)
    或运算符通常用于二进制特定位上的条件赋值,相同位只要一个为1即为1。如00000111 | 00000001 = 000001111

  • 按位异或(^)
    异或通常用于对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作相同位不同则为1,相同则为0。如00000001 ^ 00000111 = 00000110

  • 左移运算符(<<)
    左移运算符是将二进制位全部进行左移操作(相当于左边的二进制位丢弃,右边的补0),例如:00000001 << 2 = 00000100,它的值也就相当于原数*2的位数次方,00000001表示十进制1的二进制位, 1 ∗ 2 2 = 4 1*2^2 = 4 122=4,4的二进制位表示为00000100。

  • 右移运算符(>>)
    右移运算符是将二进制位全部进行右移操作(正数左补0,负数左补1,右边丢弃),例如:正数0000100 >> 2 = 00000001,它的值也就相当于原数/2的位数次方,00000100表示十进制4的二进制位, 4 / 2 2 = 1 4/2^2 = 1 4/22=1,1的二进制位表示为00000001。负数10000100 >> 2 = 11100001

位运算的高级操作

1) 判断整数的奇偶性

一个数 & 1 ,如果结果为1,则原数为奇数;如果结果为0,则原数为偶数。

3 & 1  //相当于0011 & 1 = 0001 = 1,为奇数

4 & 1  //相当于0100 & 1 = 0000 = 0,为偶数

2)位操作进行高低位交换

a = (a >> 8)| (a << 8);

3)不使用中间变量交换两个整型变量的值

// 常规的数据交换
int a = 1,b = 6;
a = a + b;  //a = 7
b = a - b;  //b = 1
a = a - b;  //a = 6

// 用位运算
// a = 0001,b = 0110
int a = 1,b = 6;
a = a ^ b;  //a = 0111 = 7
b = a ^ b;  //b = 0001 = 1
a = a ^ b;  //a = 0110 = 6

4)数据的“组装”
假如我们拿到了被拆解的后的数据分别为:0x12 0x34 0x56 0x78,如何组装成0x12345678呢?

x = 0x12<<24 | 0x34<<16 | 0x56<<8 | 0x78

5)数据的“拆解”
在数据的传输过程中需要对整型数据进行拆解,例如 int x = 0x12345678, 我们需要将x分别拆解成0x12 0x34 0x56 0x78进行传输文章来源地址https://www.toymoban.com/news/detail-416946.html

int x = 0x12345678;
x & 0xFF;

(x >> 8) & 0xFF;
(x >> 16) & 0xFF;
(x >> 24) & 0xFF;

到了这里,关于C语言从入门到精通学习第6天(位运算的基本操作)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stata学习笔记(一)stata入门与基本操作

    这里开个新坑,主题有关stata使用以及定量分析入门,主要内容来自于之前与之后的课程学习、作业以及资料查询整理,主要目的是对个人学习过程的一个记录,方便日后回顾。 方法1:点击文件选项,选择导入,根据数据类型选择即可; 方法2::点击进入数据编辑器界面,点

    2024年02月21日
    浏览(40)
  • 数据结构学习——C语言对栈的基本操作

             栈(Stack)是一种常用的数据结构,遵循先进后出(LIFO)的原则,对表尾进行操作,常用于临时存储和撤销等操作,其基本操作包括栈的创建、入栈(也叫压栈Push)、出栈(又称弹栈)、栈的遍历、栈的清空(clear)、栈的销毁(destroy)等。         栈的创建有两种方式,一种是通

    2024年02月07日
    浏览(57)
  • 学习Nano编辑器:入门指南、安装步骤、基本操作和高级功能

    1.1 关于Nano编辑器 Nano是一个简单易用的文本编辑器,适用于终端环境。它具有轻量级、快速启动和基本功能的特点,非常适合新手使用。 1.2 Nano的起源和特点 Nano最早是Pico编辑器的克隆版本,后来发展成为一个独立且功能更加强大的编辑器。它具有简洁的用户界面、直观的操

    2024年02月04日
    浏览(49)
  • python中的运算符号含义,python基本运算符的操作

    本篇文章给大家谈谈python的运算符号有哪些类型,以及python各运算符号的功能说明,希望对各位有所帮助,不要忘了收藏本站喔。 1.算数运算符(最常见的)     标准算数运算符(加减乘除)     取余运算符     幂运算符 2.赋值运算符 3.比较运算符 4.布尔运算符 5.位运算符

    2024年02月13日
    浏览(58)
  • 【100天精通python】Day19:文件及目录操作_基本文件操作

    目录 专栏导读  1 文件的创建打开和关闭 2.1 使用内置函数open(),close()创建打开和关闭

    2024年02月14日
    浏览(57)
  • 【100天精通python】Day19:python文件及目录操作_基本文件操作

    目录 专栏导读  1 文件的创建打开和关闭 2.1 使用内置函数open(),close()创建打开和关闭

    2024年02月15日
    浏览(45)
  • 【100天精通python】Day35:GUI界面编程_一文掌握Tkinter基本操作

    目录  专栏导读    1 GUI 编程概述 1.1 为什么需要GUI? 1.2 常见的GUI编程工具和库

    2024年02月12日
    浏览(57)
  • nodejs 入门基本操作

    在窗口执行对应的目录即可,我这里是: 如上最简单的http 服务起来了,在浏览器中 输入 http://localhost:9000/index.html 得到如下页面 通过匹配后缀,在public文件中返回对应的资源,代码结构如下 都是一些很简单的代码就不贴了,如果需要留下 邮箱 即可。 其他模块看看官网的文

    2024年02月05日
    浏览(49)
  • Linux 入门基本操作

    目录 一、Linux环境的安装 1.1常见的三种Linux环境安装 1.2云服务器的操作 1.3XShell 1.4 Linux下新建与删除用户 二、Linux的基本指令和操作 2.1初始Linux必备的三剑客 ①pwd指令 ②ls指令 ③cd指令  2.2理解文件  三、指令 3.1 ls指令 ①ls -lls -d ②ls -a  ③ls -Rl 3.2 cd pwd指令 ①pwd指令补充

    2023年04月22日
    浏览(50)
  • Doris 入门:基本操作(三)

    创建用户 CREATE USER ‘test’ IDENTIFIED BY ‘123456’; 后续登录就可以直接使用命令登录 mysql -h 192.168.1.101 -P9030 -utest -p12345 创建数据库并赋予权限 初始可以通过 root 或 admin 用户创建数据库 create database test_db; 查看数据库 show databases; 授权 grant all on test_db to test; 注意 可以使用 help

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包