微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 程序仿真时为什么>>0,看到的数据相当于>>1呢?

程序仿真时为什么>>0,看到的数据相当于>>1呢?

时间:10-02 整理:3721RD 点击:


上图ptr1按预想应该是右移一位,得到0x13;可是实际仿真发现
ptr1得到的数值是0x09,相当于>>2。
后来我使用ptr,发现>>0,得到的结果才是>>1的,这是咋回事?
请高手指点啊,想不懂!


你还是先看看指针怎么用的把

正解是
*ptr>>0相当于*ptr*1
*ptr>>1相当于*ptr*2
*ptr>>2相当于*ptr*4
你操作的是地址ptr,应该操作值*ptr

我本打算就是想操作地址的,本来我想通过这句:ptr =(uint16 *)  ((uint16)p1 + (((uint16)(p2-p1))>>1));
来达到折半查数组表的功能,可是仿真时我发现>>1指针指向的地址相当于>>2。这我就搞不懂了!
要是都改为char型的,运行地址都对。
请您帮我指点下,多谢了,确实搞不懂!

经过查找,找到原因所在了。
NTCTAB[0]和NTCTAB[19]已经强制类型转化,后面再操作就不需要再进行强制类型转化了,直接操作就行了。后面改为:ptr = ((p2-p1)>>1);就可以了。

看了这个帖子也学到了一点东西

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top