程序仿真时为什么>>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);就可以了。
看了这个帖子也学到了一点东西