• 【无标题】


    STM32 学习 1, 置位 和 清零

    本文假设计算机就是8位的,这样好举例。

    置位 其实就是把相应位置 设置成1

    清零 其实就是把对应位置 设置成0

    如何操作置位和清零

    首先要知道 操作的是那一位,比如如下的第2位。

    置位: 本质思想,无论原来的位置是0还是1,,最终结果都要是1,则我们采用或操作“|” ,我人为拿一个1出来,跟原来的数进行或操作,则对应位置肯定是1。。。。但是我又不能影响原来人家对应的位置。则我需要把除了这个1位设置成1外,其他位置都是0。。。。然后我或的时候,其他位置不变。

    1)。如操作数:a=01101000 我想要这个数的右边第二个位置是1。。。则本质上我在对应位置给一个1.然后其他位置都是0,然后再或。就可以。就是:
    第一步;人为构造一个第二个位置一个1。。。就是1<<1…变成00000010
    第二步;把a 和构造处理的00000010 或一下子就是
    01101000
    00000010
    则可以知道结果就是01101010 就达到了修改操作数a第二位是1的目的,就是置位1.
    用表达式就是:
    a = a | (1<<1)
    用那种骚写法就是
    a |= (1<<1)

    2)。上述操作数a 我们修改的是原来位置上0变成1。。。有一半的说服力。假设我不知道那个位置是0,还是1。。。我就想让最终结果变成1.
    则举例如:b = 01101010 我想修改右边第二位是1(这里假设不知道原来这个位置是1)
    第一步:人为给出一个数 1,左移1位(就是右边第二位). 1<<1 就是: 00000010
    第二步:和b 货一下子
    01101010
    00000010
    则可知结果就是01101010 就达到了修改第二个位置的目的。(假设原来不知道第二位置是1,就想置1)

    总结1:综上可见,想要某个位置置1.就是先左移构造,因为左移右边补0,就是单纯的左移多少位,就是对应位置是1。。。。。。剩下位置是0.跟原来的 一 或或。。。原来的其他位置和0或,不变。要改变的位置是1,则不论原来位置是0还是1,我们都是1.

    清零: 本质思想,无论原来位置是0还是1,,最终结果都要是0,那就很简单了。我们采用与操作“&”,因为这个玩意只要有1个0,无论另外一个位置是啥,两个一与,最终结果就是0。 则我们认为的给一个操作数对应位置是0,然后在与,这样就保证了对应位置清零。
    清零有一个技巧就是 左移之后,要取反,为啥要取反哪? 整体取反了 则本来我们左移构造出来的数,对应位置由1变成0.其他位置由0变成1. 然后我们在和操作数与一下子。。。这样因为我们的构造数其他位置是1,在与的时候能操持原来的样子。我们想要修改的位置因为是0,所以无论对应位置是0还是1. 与完之后都是0, 就达到了清0 的目的。

    1),如操作数a = 10101100 要修改右边第四位成0
    第一步:构造数,把1左移3位。 1<<3 变成00001000
    第二步:取反(为了不影响原操作数) 则变成 11110111
    第三步,拿构造出来的数和a进行与操作
    10101100
    11110111
    则结果是10100100 和原来的a对比就是修改了第四位是0

    2),假设原本位置就是0,但是我不知道,我还想把他改成0
    如操作数a=00101101 我想修改第五位成0(这里装看不见第五位是0)
    则:
    第一步:构造书 1<<4 变成00010000
    第二步:取反 11101111
    第三步:与操作
    00101101
    11101111
    结果是00101101
    就修改成功。

    总结2:想要清零,就要首先保证对应位是0,然后和操作数与。这样无论原来位置是0还是1,都会变成0。。。。但是同时还要保证人家原来的操作数不变,怎么能够在与的时候原来的不变? 答案就是其他位设置成1。。。。所以我们需要构造一个,对应位是0,其余位是1的操作数。所以还需要把1左移多少位之后的结果取反,就OK。

  • 相关阅读:
    【C语言】数组详解,初学者一看就懂
    【linux命令讲解大全】076.pgrep命令:查找和列出符合条件的进程ID
    算法通过村第十七关-贪心|白银笔记|贪心高频问题
    人事管理系统springboot42
    OpenCV 人脸检测(易上手版)
    Qt学习总结之QFileDialog
    php服装商城网站毕业设计源码241505
    【RocketMQ系列四】消息示例-简单消息的实现
    PyQt5快速开发与实战 9.3 Pandas在PyQt中的应用
    基于JSP的动漫论坛
  • 原文地址:https://blog.csdn.net/liyu180554320/article/details/125527590