壹:
   对于优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外。这是程序员总结出来的最快的学习方式。
可在实战中,还是经常遇到一些让人困惑的问题。下面看一个实例。
 
贰:
   代码很简单,直接上源码:
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned int uint32_t;
uint8_t buf3[] = {0x12,0x34,0x56,0x78};
int main()
{ // unexpected result
uint32_t tick_num1 = buf3[0]<<8 + buf3[1];
printf("tick_num1 is:0x%x \n\r",tick_num1); uint32_t tick_num2 = (buf3[0]<<8) + buf3[1];
printf("tick_num2 is:0x%x \n\r",tick_num2); // unexpected result
uint32_t tick_num3 = buf3[0] + buf3[1]<<8 + buf3[2]<<16 + buf3[3]<<24;
printf("tick_num3 is:0x%x \n\r",tick_num3); // expected result
uint32_t tick_num4 = buf3[3] + (buf3[2]<<8) + (buf3[1]<<16) + (buf3[0]<<24);
printf("tick_num4 is:0x%x \n\r",tick_num4); return 0;
}
假如不看运算结果,估计没几个人能把这个结果算出来,不信的话你可以试试。对的话直接来我们公司面试即可。
叁:
 下面是运算结果,是不是有些出乎你的预料呢?
➜  char_vs_int git:(master) ✗ ./test
tick_num1 is:0x20000000
tick_num2 is:0x1234
tick_num3 is:0x0
tick_num4 is:0x12345678

建议吃不准的同学还是尽量加括号,这样才不至于犯大错。

c语言运算符优先级实例解析的更多相关文章

  1. 一道c语言运算符优先级问题

    一道c语言运算符优先级问题 #include <iostream> using namespace std; int main() { char test[] = {"This ...

  2. C语言运算符优先级及结合性

    今天去翻了下C语言运算符的优先级和结合性,发现当初学习的时候就没认真记住,惭愧.发现一篇讲得不错的文章,编辑了下转来供以后翻阅. C语言运算符优先级表(由上至下,优先级依次递减) 运算符 结合性 () ...

  3. C语言运算符优先级总结

    一 写在开头1.1 本文内容本文内容为C语言中运算符优先级的总结.转载于:https://blog.csdn.net/huangblog/article/details/8271791,感谢原作者的付 ...

  4. C语言运算符优先级和ASCII表

    1. C语言运算符优先级及结合性 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成 ...

  5. (转)C语言运算符优先级 详细列表

    C语言运算符优先级 详细列表 文章转自:Slyar Home 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数 ...

  6. C语言 运算符优先级和结合方向

    运算符优先级和结合方向 初级运算符( ).[ ].->..  高于  单目运算符  高于  算数运算符(先乘除后加减)  高于  关系运算符  高于  逻辑运算符(不包括!)  高于  条件运算 ...

  7. C语言运算符优先级和结合性一览表

    所谓优先级就是当一个表达式中有多个运算符时,先计算谁,后计算谁.这个其实我们在小学学算术的时候就学过,如1+4÷2. 但是C语言中的运算符已经远不止四则运算中的加减乘除了,还有其他很多运算符.当它们出 ...

  8. C语言运算符优先级和口诀(转)

    一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   ...

  9. C语言运算符优先级和口诀 (转)

    一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   ...

  10. 转载--C语言运算符优先级和口诀

    转载:http://www.cnblogs.com/zhanglong0426/archive/2010/10/06/1844700.html 一共有十五个优先级: 1   ()  []  .  -& ...

随机推荐

  1. Windows 11 ISO原版镜像文件下载(2024年01月)

    Windows 11 (business editions), version 23H2 (x64) - DVD (Chinese-Simplified) 链接:https://pan.baidu.c ...

  2. System.SysUtils.TStringHelper 详解,注意事项

    大小写转换: function ToLower: string; function ToLower(LocaleID: TLocaleID): string; function ToLowerInva ...

  3. 金仓数据库(kingbase)的system用户被锁的解锁步骤

    今天发现我安装的金仓数据库(kingbase)的system用户被锁了,无法登陆.百度搜了下,使用SUPERMANAGER_V8ADMIN可以解锁,试了下果然如此.解锁步骤如下: 用户:SUPERMA ...

  4. 借助Rich库实现Pandas DataFrame颜值升级

    pandas的DataFrame功能强大自不必说,它可以帮助我们极大的提高统计分析的效率. 不过,使用DataFrame开发我们的分析程序的时候,经常需要打印出DataFrame的内容,以验证和调试数 ...

  5. NC15065 小牛vs小客

    题目链接 题目 题目描述 小牛和小客玩石子游戏,他们用n个石子围成一圈,小牛和小客分别从其中取石子,谁先取完谁胜,每次可以从一圈中取一个或者相邻两个,每次都是小牛先取,请输出胜利者的名字(小牛获胜输出 ...

  6. MQTT-QoS与协议流程

    QoS的报文收发流程 QoS 0 最多交付一次,消息有可能丢失,最低的QoS等级,没有任何的机制,不需要等待确认和重传,只要保证消息发送,也可能到达不了接收端 QoS0消息发送流程: 发送端调用API ...

  7. Nand flash基本原理

    Nand flash基本原理       Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Vol ...

  8. java 从零开始手写 redis(11)clock时钟淘汰算法详解及实现

    前言 java从零手写实现redis(一)如何实现固定大小的缓存? java从零手写实现redis(三)redis expire 过期原理 java从零手写实现redis(三)内存数据如何重启不丢失? ...

  9. 使用CNN实现MNIST数据集分类

    1 MNIST数据集和CNN网络配置 关于MNIST数据集的说明及配置见使用TensorFlow实现MNIST数据集分类 CNN网络参数配置如下: 原始数据:输入为[28,28],输出为[1,10] ...

  10. tmpwatch命令

    tmpwatch命令 tmpwatch递归删除给定时间内未访问的文件,通常用于清理用于临时存放空间的目录,并可以设置文件超期时间,默认单位以小时计算. 语法 tmpwatch [-u | -m | - ...