首页 > 其他分享 >C语言中的运算符优先级

C语言中的运算符优先级

时间:2023-12-10 21:33:50浏览次数:28  
标签:lsb 程序 C语言 运算符 优先级 msb

C语言中的运算符优先级

前言

这几天在调试一个程序,遇到了一个bug,就是需要读取寄存器的数据。该数据是一个16bit的数据,按照高8位一个byte和低8位一个byte分别存放在了不同的寄存器地址中。但是在我读取数据的时候,总是会出现数据不符合预期的情况。

在程序中是这样子的,读取的高8位数据存在了msb变量中,读取的低8位数据存在了lsb变量中:

//错误程序
uint8_t lsb, msb;
uint16_t mdata = msb<<8 + lsb;

直到我检查了好久程序,突然注意到了运算符优先级的问题。

将程序改为如下后,程序运行正常:

//正确程序
uint8_t lsb, msb;
uint16_t mdata = (msb<<8) + lsb;

重点:
加减运算符比移位运算符的优先级要高,所以在运行msb<<8 + lsb时,是将msb右移8+lsb个位;而在运行(msb<<8) + lsb时,是将msb右移8位,然后与lsb相加。

C语言运算符优先级

这不得不又让我复习了一遍C语言的运算符优先级顺序。

在下图中,优先级数字越小,说明该运算符的优先级越高
运算符优先级列表

最后,程序的另外一种正确写法:

//正确程序
uint8_t lsb, msb;
// uint16_t mdata = (msb<<8) + lsb;
uint16_t mdata = msb<<8 | lsb;

标签:lsb,程序,C语言,运算符,优先级,msb
From: https://www.cnblogs.com/haostudio/p/17893265.html

相关文章

  • c语言指针
    【C语言】中的指针说明:只是学习中的一些感悟,如有错误,欢迎指正一、指向指针的指针指向指针的指针是C语言中的一种数据类型,通常简称为"指针的指针",使用两个星号('**')表示。指向指针的指针是一个变量,其值是另一个指针的地址。|1.用法:1>如下定义了一个指向指针的指针char**......
  • 【C语言】预处理
    1、预定义符号C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。__FILE__//进⾏编译的源⽂件__LINE__//⽂件当前的⾏号__DATE__//⽂件被编译的⽇期__TIME__//⽂件被编译的时间__STDC__//如果编译器遵循ANSIC,其值为1,否则未定义举例:printf("fi......
  • 类内 重载运算符 分数 加减乘除
    #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;classRational{private:intnumerator,denomirator;staticintgcd(intn,intd);public:Rational(){};Rat......
  • -变量作用域与运算符
    变量作用域与运算符//类变量staticstaticdoublesalary=2500;//虽然是整数但一样能用,因为精度更高//属性:变量//实例变量:从属于对象(类):如果不自行初始化,这个类型的默认值是0//布尔值:默认是false//除了基本类型(八个),其余的默认值是nullStringname;intage;//main方......
  • 变量作用域与运算符
    变量作用域与运算符//类变量staticstaticdoublesalary=2500;//虽然是整数但一样能用,因为精度更高//属性:变量//实例变量:从属于对象(类):如果不自行初始化,这个类型的默认值是0//布尔值:默认是false//除了基本类型(八个),其余的默认值是nullStringname;intage;//main方......
  • 《初学C语言第19天》
    //////——————————————-作业题//////写一个二分查找函数//////功能:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.//////arr是查找的数组//////left数组的左下标//////right数组的右下标//////key要查找的数字//#include<stdio.h>//......
  • 支持优先级继承的RT-mutex子系统
    https://www.kernel.org/doc/html/v6.6/locking/rt-mutex.htmlRT-mutex子系统支持PIRT-mutexes与优先级继承一起使用,以支持PI-futexes,从而使pthread_mutex_t支持优先级继承属性(PTHREAD_PRIO_INHERIT)。[有关PI-futexes的更多详细信息,请参见轻量级PI-futexes。]这项技术是在-rt......
  • 一些神奇的运算优先级
    首先来看这个代码intf(int*p){ inty=(*p)*2; (*p)++; returny;}intmain(){ intx=10; cout<<x+f(&x); return0;}这个代码输出的是31,感觉似乎f加了一个括号?那再看看这个代码intf(int*p){ inty=(*p)*2; (*p)++; returny;}intmain(){ intx=10......
  • 轻松拿下C语言的分支与循环结构
    C语言是由顺序结构、选择结构、循环结构组成的结构化程序设计语言。我们日常所见的事情都可以拆分成这三种结构或者这三种结构的组合。顺序结构:按语句出现的先后顺序,以此执行。选择结构(也叫分支结构):根据所给定的条件选择是否执行。循环结构:根据要求,将语句重复执行多次。接下来......
  • 小学生教学辅助系统C语言实验报告
    一、实验目的(1)  掌握变量、函数的使用(2)  掌握选择结构、循环结构的使用(3)  熟悉模块化程序设计的方法二、实验仪器或设备微型计算机三、总体设计(设计原理、设计方案及流程等)设计一个简单的小学生计算机辅助教学系统,帮助小学生学习四则运算。使用模块化程序设计方法......