我有一些理解左移操作符的问题.我知道如果向左移位x位数,那么将数字乘以2几位乘以移位的位数.
但考虑一下这个程序:
int a=4,*pA=&a,r3;
printf("%d\n",pA);
printf("%d\n",(*pA<<2));
r3=pA-(*pA<<2);
printf("%d",r3);
Run Code Online (Sandbox Code Playgroud)
它分别打印出pA和(*pA << 2),如果要减去这两个,它将不等于表达式中写入的r3,关闭4次,即int的大小.但是你需要考虑int的大小,因为你有pA和(*pA << 2),并且它们的减法不等于它的预期.
任何帮助表示赞赏......
为了记录,我对打印出指针的实际值不感兴趣,但实际上它的地址被移位了2位.我不明白正在发生的过程.
指针上的算术与其指向的大小成比例.所以当你做pA - 80
你的代码实际上pA - 80*sizeof(*pA)
.这与此无关<<
.
您还应该使用%p
格式说明符打印地址.并将指针值存储在整数类型中使用intptr_t
或uintptr_t
(从stdint.h
).在编译器上启用警告,如果不这样做,它应该抱怨.
归档时间: |
|
查看次数: |
102 次 |
最近记录: |