💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
【31.1 “或”运算。】 “或”运算也是以位为单位进行运算的。位是指二进制中的某一位,位只能是0或者1。两个数的“或”运算就是转换成二进制后每一位的“或”运算。 “或”运算的符号是“|”。运算规律是:两个位的“或”运算,如果两个位都是0,那么运算结果才是0,否则只要其中有一位是1,那么运算结果必定是1。比如: 0|0等于0。 0|1等于1。 1|0等于1。 1|1等于1。 现在举一个完整的例子来分析“|”运算的规律。有两个unsigned char类型的十进制数分别是12和9,求12|9的结果是多少?分析步骤如下: 第一步:先把参与运算的两个数以二进制的格式展开。十进制转二进制的方法请参考前面第14,15,16节的内容。 十进制12的二进制格式是:00001100。 十进制9的二进制格式是: 00001001。 第二步:二进制数右对齐,按上下每一位进行“或”运算。 十进制的12 -> 00001100 十进制的9 -> |00001001 “或”运算结果是 -> 00001101 第三步:把二进制的00001101转换成十六进制是:0x0D。转换成十进制是13。所以12|9的结果是13。 上一节讲的“与”运算最常见的用途是可以指定一个变量的某位清0,而本节的“或”运算刚好相反,“或”运算最常见的用途是可以指定一个变量的某位置1,其它位保持不变。比如一个unsigned char类型的变量b,数据长度一共是8位,从右往左: 想让第0位置1,其它位保持不变,只需跟十六进制的0x01相“或”:b=b|0x01。 想让第1位置1,其它位保持不变,只需跟十六进制的0x02相“或”:b=b|0x02。 想让第2位置1,其它位保持不变,只需跟十六进制的0x04相“或”:b=b|0x04。 想让第3位置1,其它位保持不变,只需跟十六进制的0x08相“或”:b=b|0x08。 想让第4位置1,其它位保持不变,只需跟十六进制的0x10相“或”:b=b|0x10。 想让第5位置1,其它位保持不变,只需跟十六进制的0x20相“或”:b=b|0x20。 想让第6位置1,其它位保持不变,只需跟十六进制的0x40相“或”:b=b|0x40。 想让第7位置1,其它位保持不变,只需跟十六进制的0x80相“或”:b=b|0x80。 根据上述规律,假设b原来等于十进制的84(十六进制是0x54,二进制是01010100),要想把此数据的第0位置1,只需b=b|0x01。最终b的运算结果是十进制是85(十六进制是0x55,二进制是01010101)。把它们展开成二进制格式的运算过程如下: 十进制的84 -> 01010100 十六进制的0x01 -> |00000001 “或”运算结果是 -> 01010101 【31.2 或运算的“自或简写”。】 当被或数是“保存变量”时,存在“自或简写”。 “保存变量”=“保存变量” | “某数” ; 上述自或简写如下: “保存变量” | =“某数” ; 比如: unsigned char c=9; c|=5; //相当于c=c|5; 最后的计算结果c是13。 【31.3 例程练习和分析。】 现在编写一个程序来验证刚才讲到的“或”运算: 程序代码如下: /\*---C语言学习区域的开始。-----------------------------------------------\*/ void main() //主函数 { unsigned char a; unsigned char b=84; //十六进制是0x54,二进制是01010100。 unsigned char c=9; a=12|9; b=b|0x01; c|=5; //相当于c=c|5; 最后的计算结果c是13。 View(a); //把第1个数a发送到电脑端的串口助手软件上观察。 View(b); //把第2个数b发送到电脑端的串口助手软件上观察。 View(c); //把第3个数c发送到电脑端的串口助手软件上观察。 while(1) { } } /\*---C语言学习区域的结束。-----------------------------------------------\*/ 在电脑串口助手软件上观察到的程序执行现象如下: 开始... 第1个数 十进制:13 十六进制:D 二进制:1101 第2个数 十进制:85 十六进制:55 二进制:1010101 第3个数 十进制:13 十六进制:D 二进制:1101 分析: 通过实验结果,发现在单片机上的计算结果和我们的分析是一致的。 【31.4 如何在单片机上练习本章节C语言程序?】 直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C语言学习区域”的代码就可以了,其它部分的代码不要动。编译后,把程序下载进带串口的51学习板,通过电脑端的串口助手软件就可以观察到不同的变量数值,详细方法请看第十一节内容。