首页 > 其他分享 >c语言精通学习「2」: 位操作

c语言精通学习「2」: 位操作

时间:2023-08-15 09:59:33浏览次数:47  
标签:位操作 精通 语言 二进制 取反 特定 寄存器 0x1f

 1.位操作符

包括   

&  0&0=0 0&1=0 1&1=1  特定位清零 如11010101 & 11100111 = 11000101

|   0|0=0   1|0=1   1|1=1  特定位置一

~   ~0=1  ~1=0  逻辑取反是!,真变成加、假变成真  

^   1^1=0  0^0=1  1^0=0  特定位取反

<<  >>  左移或者右移一位,补零。嵌入式中都是无符号数采用逻辑移位

2.位操作在寄存器中的特殊作用

(1)操控硬件本质就是读写寄存器

(2)寄存器的特点就是按位进行规划和使用,但是寄存器的读写确实整体32位一起进行的

(3)寄存器操作要求就是:在特定位改变时不能影响其他位

(4)读  改 写,先把寄存器整体原来的值,然后在这个基础上修改想要修改的特定位,再将修改后的值整体写入寄存器,进而达到不修改其他位的基础下修改特定位。

3.如何运用位运算构建特定二进制数

(1)寄存器位操作经常需要特定位给特定值

  对寄存器定位置1或者清零需先构造一个特定的二进制数。  

(2)移位获取特定的为1的二进制数。

  比如bit3~bit7为1;0x1f<<3

  bit3~bit7为1,同时bit23~bit25为1,其余位为0;((0x1f<<3)|(7<<23))

(3)结合为取反获取特定0的二进制数

  bit3~bit7为0,同时bit23~bit25为0,其余位为1;~((0x1f<<3)|(7<<23))

标签:位操作,精通,语言,二进制,取反,特定,寄存器,0x1f
From: https://www.cnblogs.com/foorun/p/17628194.html

相关文章

  • 学习go语言编程之网络编程
    Socket编程Golang语言标准库对Socket编程进行了抽象,无论使用什么协议建立什么形式的连接,都只需要调用net.Dial()即可。Dial()函数Dial()函数的原型如下:funcDial(network,addressstring)(Conn,error)参数含义如下:network:网络协议名字,如:tcp,udp等Dial()函数支持的网络......
  • 学习go语言编程之并发编程
    并发基础并发包含如下几种主流的实现模型:多进程多线程基于回到的非阻塞/异步IO协程协程与传统的系统级线程和进程相比,协程最大的优势在于“轻量级”,可以轻松创建上百万个而不会导致系统资源枯竭,而线程和进程通常最多不超过1万个。Golang在语言级别支持协程,叫goroutine。......
  • Go 语言并发
    启动单个goroutinepackagemainimport( "fmt" "time")funchello(){ fmt.Println("hello")}funcmain(){ gohello() fmt.Println("欢迎来到编程狮") time.Sleep(time.Second)}sync.WaitGrouppackagemainimport( "fmt" &qu......
  • Go 语言反射(Reflect)
    Go语言提供了一种机制,在不知道具体类型的情况下,可以用反射来更新变量值,查看变量类型Typeofpackagemainimport( "fmt" "reflect")funcmain(){ varbooknumfloat32=6 varisbookbool=true bookauthor:="www.w3cschool.cn" bookdetail:=make(map[string]string) bo......
  • AVR汇编(七):位操作和MCU控制指令
    AVR汇编(七):位操作和MCU控制指令位操作指令SBI/CBISBI指令用于设置I/O寄存器中的第b位,CBI指令用于清除I/O寄存器中的第b位。例如:SBIDDRB,5;PB5设为输出模式CBIPORTB,5;PB5输出低电平移位LSL指令用于逻辑左移,低位补0。LSR指令用于逻辑右移,高位......
  • 13 桥接模式 -- go语言设计模式
    桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(HandleandBody)模式或接口(interface)模式。桥接模式的实现代码packagemainimport"fmt"//发送信息的具体实现(操作)typeMessageImplementerinterface{ send(test,......
  • Kafka从入门到精通零基础进阶学习路线?
    Kafka从入门到精通零基础进阶学习路线?1.学习基础概念和架构:-了解Kafka的基础概念,如生产者、消费者、主题、分区等。-理解Kafka的架构,包括Kafkabroker、Zookeeper、消费者群组等。2.安装和配置Kafka:-下载和安装Kafka。-配置Kafkabroker和Zookeeper。3.发送......
  • Go 语言范围(Range)
    range关键字用于for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。packagemainimport"fmt"funcmain(){//这是我们使用range去求一个slice的和。使用数组跟这个很类似nums:=[]int{2,3,4}sum:=0for_,num:=rangenums{......
  • Go 语言Map(集合)
    定义Map/*声明变量,默认map是nil*/varmap_variablemap[key_data_type]value_data_type/*使用make函数*/map_variable=make(map[key_data_type]value_data_type) packagemainimport"fmt"funcmain(){varcountryCapitalMapmap[string]string/*创建......
  • Go 语言递归函数
    递归,就是在运行的过程中调用自己。阶乘packagemainimport"fmt"funcFactorial(xint)(resultint){ifx==0{result=1}else{result=x*Factorial(x-1)}return}funcmain(){variint=15fmt.Printf("%d的阶乘是%d\n",i......