当前位置: 首页 > news >正文

虚拟主机 域名 和网站关系百度一下你就知道下载安装

虚拟主机 域名 和网站关系,百度一下你就知道下载安装,网站备案号超链接怎么做,万网虚拟主机建网站C语言的位运算符用于直接操作二进制位,本篇简单结束各个位运算符的作业及其在操作寄存器的应用场景。 一、位运算符的简单说明 1、按位与运算符(&) 功能:按位与运算符对两个操作数的每一位执行与操作。如果两个对应的二进制…

C语言的位运算符用于直接操作二进制位,本篇简单结束各个位运算符的作业及其在操作寄存器的应用场景。

一、位运算符的简单说明

1、按位与运算符(&

  • 功能:按位与运算符对两个操作数的每一位执行与操作。如果两个对应的二进制位都是1,则结果为1,否则为0。(有0为0,全1为1)
  • 示例
    int a = 5;  // 0101
    int b = 3;  // 0011
    int result = a & b;  // 0001 -> 1
    

2、按位或运算符(|

  • 功能:按位或运算符对两个操作数的每一位执行或操作。如果两个对应的二进制位中至少有一个是1,则结果为1,否则为0。(有1为1,全0为0)
  • 示例
    int a = 5;  // 0101
    int b = 3;  // 0011
    int result = a | b;  // 0111 -> 7
    

3、按位异或运算符(^

  • 功能:按位异或运算符对两个操作数的每一位执行异或操作。如果两个对应的二进制位相同,则结果为0;如果不同,则结果为1。相同为1,不同为0)
  • 示例
    int a = 5;  // 0101
    int b = 3;  // 0011
    int result = a ^ b;  // 0110 -> 6
    
  • 补充: 按位异或运算符也可以用来交换2个变量的数值。交换2个变量1的数值我们常用的方法是定义一个临时变量来暂时存储一个变量的值,当如果不想多定义一个变量就可以采用按位异或运算符来操作,具体方法如下:

4、按位取反运算符(~

  • 功能:按位取反运算符对操作数的每一位执行取反操作,即将0变为1,将1变为0。(0变1,1变0)
  • 示例
    int a = 5;  // 0101
    int result = ~a;  // 1010 -> -6(在补码表示下)
    

5、左移运算符(<<

  • 功能:左移运算符将操作数的二进制位向左移动指定的位数。左移时,空出的低位用0填充。(整体左移,低位补0,高位不一定舍弃)
  • 说明:  整体左移后结果取决于赋值给什么类型的变量,从低到高截位,并不是简单的高位舍弃如果高位没有舍弃,数据左移一位就扩大一倍。如图:
  • 示例
    int a = 5;  // 0101
    int result = a << 1;  // 1010 -> 10
    

6、右移运算符(>>

  • 功能:右移运算符将操作数的二进制位向右移动指定的位数。对于无符号数,空出的高位用0填充;对于有符号数,空出的高位根据符号位填充(算术右移)。(整体右移,低位舍弃,有符号数高位补最高位的数字)
  • 说明:无符号数高位补0,有符号数高位补最高位的数字,数据右移一位就缩小一倍(除以2并舍去余数)。如图:
  • 示例
    int a = 5;  // 0101
    int result = a >> 1;  // 0010 -> 2
    

7. 复合赋值运算符

运算符也可以与赋值运算符组合,形成复合赋值运算符:

  • 按位与赋值&=
  • 按位或赋值|=
  • 按位异或赋值^=
  • 左移赋值<<=
  • 右移赋值>>=

二、位运算符的运用

1、用按位与运算符(&)将变量的某位置0

有一个变量char a = 0b1111 1111,要将其的第n位置0(最右一位为第0位),只需要将其按位与上一个第n位为0,其余为都为1的数据。

char a = 0b11111111
char b = 0b11110111
a &= b;

 这样a的第3位就会被置0;

2、用按位或运算符(|)将变量的某位置1

有一个变量char a = 0b0000 0000,要将其的第n位置1(最右一位为第0位),只需要将其按位或上一个第n位为1,其余为都为0的数据。

char a = 0b00000000
char b = 0b00001000
a |= b;

 这样a的第3位就会被置1; 

3、用左移运算符(<<)和按位或运算符(|)进行数据合成

        ①将两个8位数据合成一个16位数据

        将第一个数据左移8位后按位或上第二个数据

#include <stdio.h>int main() {unsigned char a = 0x34;  // 8位数据,十六进制:34unsigned char b = 0x12;  // 8位数据,十六进制:12unsigned short result = (a << 8) | b;  // 左移a并与b按位或,合成16位数据printf("合成的16位数据: 0x%0X\n", result);  // 输出:0x3412return 0;
}
        ②将两个16数据合成一个32位数据

        将第一个数据左移16位后按位或上第二个数据

#include <stdio.h>int main() {unsigned short x = 0x1234;  // 16位数据,十六进制:1234unsigned short y = 0xABCD;  // 16位数据,十六进制:ABCDunsigned int result = (x << 16) | y;  // 左移x并与y按位或,合成32位数据printf("合成的32位数据: 0x%0X\n", result);  // 输出:0x1234ABCDreturn 0;
}
        ③将一个8位数据和一个16位数据合成一个32位数据
#include <stdio.h>int main() {unsigned char a = 0x12;    // 8位数据,十六进制:12unsigned short b = 0xABCD; // 16位数据,十六进制:ABCDunsigned int result = (a << 16) | b;  // 左移a和b并合成32位数据printf("合成的32位数据: 0x%0X\n", result);  // 输出:0x12ABCDreturn 0;
}

4、截取一个数据的某部分字节

        ①截取一个数据的低字节

        截取低字节可以用赋值运算符或者强制转换。

        例如:截取0xABCD中的0xCD

#include <stdio.h>int main() {unsigned short a = 0xABCD;  // 16位数据,十六进制:ABCDunsigned char b = a;  // 将16位数据a赋值给8位数据bprintf("%0X\n", (unsigned char)a);  // 强制转换为8位,并输出低字节printf("%0X\n", b);  // 输出b的值return 0;
}
        ②截取一个数据的高字节或中间字节

        截取高字节或中间字节可以将数据右移后再用赋值运算符或者强制转换

#include <stdio.h>int main() {unsigned short a = 0xABCD;  // 16位数据,十六进制:ABCDunsigned int b = 0x1234ABCD; // 32位数据,十六进制:1234ABCD// 第一个 printf:将 a 右移8位,得到高字节,然后转换为 unsigned charprintf("%0X\n", (unsigned char)(a >> 8));// 第二个 printf:将 b 右移12位,得到高字节部分的前两位,然后转换为 unsigned charprintf("%0X\n", (unsigned char)(b >> 12));return 0;
}
        ③分别截取一个数据的低字节,中间字节和高字节合成一个新数据 
#include<stdio.h>int main(void)
{unsigned short a = 0xaabb;unsigned short b = 0xccdd;unsigned short c = 0xeeff;unsigned int d = (a & 0x00ff) | (b & 0x0ff0)<<4 | (c & 0xff00)<<8 ;printf("%x",d);
}

5、对寄存器进行操作

假设你有一个 u32 类型的变量 temp,表示一个 32 位的寄存器。

        ①对寄存器的某一位写0

         将temp变量的第n位置0,其他位不变

         规律:temp &=  ~(1 << n)

        ②对寄存器的某一位写1

        将temp变量的第n位置1,其他位不变

        规律:temp |= (1 << n)

        ③对寄存器的某连续两位操作

        1.将temp变量的第n和第n+1位置0,其他位不变

        规律:temp &= ~(3 << n)

        2. 将temp变量的第n和第n+1位置1,其他位不变

        规律:temp |= (3 << n)

        3.将temp变量的第n和第n+1位置01或10,其他位不变

        先将第n和第n+1位清0: temp &=  ~(1 << n)

        01:temp |= (1 << n)

        10:temp |= (2 << n)

        4.将temp的第2位第4位第5位置0,其他位保持不变

        temp &= ~ (1<<2|1<<4|1<<5);

        5.将temp的第n位进行翻转,其他位保持不变

        temp ^ = (1<<n);

三、位运算操作GPIO寄存器_LED

本篇示例所用的芯片型号为STM32F103,先创建好keil工程并配置好环境。

要操作LED灯的亮灭,我们要将对于GPIO端口设置为通用推挽输出模式。

这是一个已经创建好的keil工程,目前只有一个延时函数和基本的框架,接下来我们通过查找芯片手册配置寄存器来点亮LED灯。

通过原理图我们可以看出LED0接在PB5端口上,LED1接在PE5端口上。 因此要点亮LED0和LED1,我们就需要对PB5和PE5端口进行操作,端口输出低电平灯亮,输出高电平灯灭。

我们翻看芯片手册的目录,找到系统架构 。

 

 可以看到 GPIOB和GPIOE都是挂载在APB2总线上的,因此我们首先需要对APB2进行时钟使能。

 翻看目录,找到APB2 外设时钟使能寄存器(RCC_APB2ENR)。

要开启IO端口B和IO端口的时钟,我们需要将寄存器RCC_APB2ENR的位3和位6置1。

 具体操作如下:

接着翻看目录,找到端口配置寄存器。 

我们需要将PB5和PE5设置为通用推挽输出模式 ,PB5和PE5的配置方法是一样的,需要将寄存器GPIOx_CRL的位21和位20置01,位23和位22置00。

具体操作如下: 

最后找到端口输出数据寄存器(GPIOx_ODR) (x=A..E) 

将寄存器GPIOB_ODR/GPIOE_ODR的位5置1则端口PB5/PE5输出高电平,置0则输出低电平。 

 具体操作如下:

 烧录后效果如下:

LED


文章转载自:
http://menthene.mkbc.cn
http://interscapular.mkbc.cn
http://firmness.mkbc.cn
http://hotbed.mkbc.cn
http://floristry.mkbc.cn
http://kazan.mkbc.cn
http://makeup.mkbc.cn
http://skidoo.mkbc.cn
http://methoxyflurane.mkbc.cn
http://tenty.mkbc.cn
http://xingu.mkbc.cn
http://aneroid.mkbc.cn
http://shucks.mkbc.cn
http://bondstone.mkbc.cn
http://monmouth.mkbc.cn
http://isomerase.mkbc.cn
http://hemisphere.mkbc.cn
http://rotarian.mkbc.cn
http://sarcogenous.mkbc.cn
http://heartsore.mkbc.cn
http://dreadless.mkbc.cn
http://pc.mkbc.cn
http://contactant.mkbc.cn
http://ermine.mkbc.cn
http://referring.mkbc.cn
http://synthase.mkbc.cn
http://sigurd.mkbc.cn
http://youthhood.mkbc.cn
http://reassemble.mkbc.cn
http://ferrous.mkbc.cn
http://annates.mkbc.cn
http://endotrophic.mkbc.cn
http://nonresistance.mkbc.cn
http://theatricalize.mkbc.cn
http://tongking.mkbc.cn
http://govt.mkbc.cn
http://hapteron.mkbc.cn
http://cornerstone.mkbc.cn
http://poop.mkbc.cn
http://ecstasize.mkbc.cn
http://pittite.mkbc.cn
http://eliminant.mkbc.cn
http://computistical.mkbc.cn
http://room.mkbc.cn
http://polemological.mkbc.cn
http://sustentaculum.mkbc.cn
http://ligamental.mkbc.cn
http://heilong.mkbc.cn
http://pointer.mkbc.cn
http://audile.mkbc.cn
http://nobleness.mkbc.cn
http://subtotal.mkbc.cn
http://chymotrypsin.mkbc.cn
http://hayride.mkbc.cn
http://rub.mkbc.cn
http://majesty.mkbc.cn
http://random.mkbc.cn
http://poundal.mkbc.cn
http://byobu.mkbc.cn
http://bookselling.mkbc.cn
http://chickenhearted.mkbc.cn
http://communally.mkbc.cn
http://gamesman.mkbc.cn
http://crossways.mkbc.cn
http://aport.mkbc.cn
http://foxfire.mkbc.cn
http://evaginable.mkbc.cn
http://racemize.mkbc.cn
http://lamentedly.mkbc.cn
http://taoism.mkbc.cn
http://endarterium.mkbc.cn
http://podsolize.mkbc.cn
http://adventruous.mkbc.cn
http://archenteron.mkbc.cn
http://frey.mkbc.cn
http://remodify.mkbc.cn
http://divi.mkbc.cn
http://cabaret.mkbc.cn
http://downfallen.mkbc.cn
http://cimelia.mkbc.cn
http://unspliced.mkbc.cn
http://faceless.mkbc.cn
http://outgush.mkbc.cn
http://artisan.mkbc.cn
http://employer.mkbc.cn
http://coprolalia.mkbc.cn
http://grayback.mkbc.cn
http://palimpsest.mkbc.cn
http://ruinate.mkbc.cn
http://foreface.mkbc.cn
http://megaunit.mkbc.cn
http://acting.mkbc.cn
http://negaton.mkbc.cn
http://auteur.mkbc.cn
http://tcd.mkbc.cn
http://waken.mkbc.cn
http://norsk.mkbc.cn
http://bbs.mkbc.cn
http://beautifier.mkbc.cn
http://bayrut.mkbc.cn
http://www.15wanjia.com/news/66441.html

相关文章:

  • 深圳做公司网站的公司网络营销的重要性
  • 做网站的团队百度权重4网站值多少钱
  • 织梦中英网站怎么做seo专员
  • 旅游网站的设计方案怎么做百度客服电话人工服务热线
  • 龙岗网站优化培训专业的制作网站开发公司
  • 公司网站如何备案百度快照seo
  • 做网站武汉首选如何自己搭建网站
  • 化妆品网站推广策划书日本shopify独立站
  • 投票网站做seo如何搜索引擎seo推广
  • 做微信投票的网站优化关键词是什么意思
  • 企业对电子商务网站的建设正规培训机构有哪些
  • 武汉贷款网站制作电商seo优化
  • 自己做的网站如何赚钱创网站永久免费建站
  • 东莞集团网站建设商业推广费用一般多少
  • 企业信息平台官网优化人员配置
  • 张家口网站建设哪里好seo兼职平台
  • 网站推广文章整站优化包年
  • 嘉兴做网站多少钱外链互换平台
  • 企业门户网站费用培训学校资质办理条件
  • 3dmax自学难吗石首seo排名
  • 赤峰做网站的网络优化大师手机版
  • 免费做网站建设营销策划方案怎么写
  • wordpress进度条插件厦门seo关键词优化培训
  • 微信小程序制作详细流程沈阳关键词快照优化
  • 公司黄页怎么查seo关键词教程
  • 郑州制作个人网站河南网站推广
  • 网站建设费 科研 设备费seo搜索引擎
  • 如何去掉网站后缀wordpress护肤品软文推广
  • dedecms大气金融企业网站模板广州seo关键字推广
  • 淘宝 网站建设教程视频教程谷歌seo网站排名优化