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

2019-07-15 13:26发布

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





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
chenwei6991627
1楼-- · 2019-07-15 18:32
 精彩回答 2  元偷偷看……
lee_st
2楼-- · 2019-07-15 19:13

正解是
*ptr>>0相当于*ptr*1
*ptr>>1相当于*ptr*2
*ptr>>2相当于*ptr*4
你操作的是地址ptr,应该操作值*ptr
kuo608
3楼-- · 2019-07-15 19:13
lee_st 发表于 2016-7-14 16:38
正解是
*ptr>>0相当于*ptr*1
*ptr>>1相当于*ptr*2

我本打算就是想操作地址的,本来我想通过这句:ptr =(uint16 *)  ((uint16)p1 + (((uint16)(p2-p1))>>1));
来达到折半查数组表的功能,可是仿真时我发现>>1指针指向的地址相当于>>2。这我就搞不懂了!
要是都改为char型的,运行地址都对。
请您帮我指点下,多谢了,确实搞不懂!!
kuo608
4楼-- · 2019-07-15 23:40
经过查找,找到原因所在了。
NTCTAB[0]和NTCTAB[19]已经强制类型转化,后面再操作就不需要再进行强制类型转化了,直接操作就行了。后面改为:ptr = ((p2-p1)>>1);就可以了。
哭泣的眼泪
5楼-- · 2019-07-16 01:21
看了这个帖子也学到了一点东西

一周热门 更多>