C51单片机逻辑运算和位运算

学习单片机离不开C语言,C51中的运算符与通用C语言基本一致,常用的主要是位运算符、算术运算符、关系运算符、逻辑运算符和赋值运算符等。

C51中定义位变量需要寄存器,sbit是定义特殊功能寄存器的位变量。bit和sbit都是C51扩展的变量类型。典型应用是:sbit P0_0=P0^0;    //即定义 P0_0 为 P0 口的第1位,声明地址中的某一位,以便进行位操作。bit, sbit 和 int ,char 之类的差不多,都可以定义变量,只不过char=8位,bit=1位。

"sfr"用来直接描述硬件地址,一组IO口的起始地址中数据 可以这样定义。

sfr P0 = 0x80;    P0=0;  //也就是对 P0 口全部给 0

sfr P0 = 0x80;    将地址  0x80  叫做引脚 P0, 字节为单位

sfr(special function register):特殊功能寄存器声明

例:sfr P0 = 0x80;     声明P0口寄存器,物理地址为0x80

sbit(special bit):特殊位声明

例:sbit P0_1 = 0x81;    或    sbit P0_1 = P0^1;

一、逻辑运算

1.1逻辑运算符

运算符说明结合性举例
&&与运算,双目,对应数学中的  "且"左结合1&&0,(9>3) && (a<b)
||或运算,双目,对应数学中的  "或"左结合1 || 0,(9>3) || (a<b)
非运算,双目,对应数学中的  "非"右结合! a、  ! (2>5)

&&  逻辑与         条件式 1 && 条件式 2     如果两个条件式都为非零,则条件为真。

||     逻辑或         条件式 1 || 条件式 2        如果两个条件式任意一个为非零,则条件为真。

!    逻辑非        !条件式                          如果条件式为非零,则条件为真

二、位运算

汇编语言对位的处理能力是很强的,但是C语言也能对运算对象进行按位操作,从而使C语言也能具有一定的对硬件直接进行操作的能力。

2.1 & 按位与 

运算中对应的数都为1则结果为1,任意一个数为0,则结果为0。

例如:0x53 & 0x24

0x53二进制           0101 0011

0x24二进制           0010 0100

与运算结果            0000 0000        0x00

2.2 | 按位或

运算中有任意一个数为1则结果为1。

例如:0x53 & 0x24

0x53二进制           0101 0011

0x24二进制           0010 0100

或运算结果            0111 0111        0x77

2.3 ~ 按位取反

  • ~ 是对位取反,1变为0,0变为1

2.4 ^ 按位异或 

运算中两个数都为0或者都为1则结果为0(相同为0,不同为1).

例如:0x53 & 0x24

0x53二进制               0101 0011

0x24二进制               0010 0100

异或运算结果            0111 0111        0x77

2.5  << 左移   

运算符意义示例结果
<<向左移位X<<YX的每个位向左移动Y位
>>向右移位X>>YX的每个位向右移动Y位

超过的位将丢失,而空出的位则补0。

例如:0x53

0x53二进制 :          0101 0011            

左移一位:               1010 0110                十六进制:0xA6

左移两位:                0100 1100                十六进制:0x4C

2.6  >> 右移

超过的位将丢失,而空出的位则补0。   

例如:0x53

0x53二进制 :           0101 0011            

右移一位:                0010 1001                十六进制:0x29

右移两位:                0001 0100                十六进制:0x14

          

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值