gpt4 book ai didi

c - 需要帮助理解 C 中的左移运算符

转载 作者:行者123 更新时间:2023-11-30 18:21:32 25 4
gpt4 key购买 nike

我在理解左移运算符时遇到一些问题。我知道如果向左移动 x 个位数,那么几乎可以将该数字乘以 2 的移位位数次方。

但考虑一下这个程序:

int a=4,*pA=&a,r3;
printf("%d\n",pA);
printf("%d\n",(*pA<<2));
r3=pA-(*pA<<2);
printf("%d",r3);

它分别打印出pA和(*pA<<2),如果你把这两个相减,它不会等于表达式中写的r3,相差4倍,这就是大小的 int。但是你需要在哪里考虑 int 的大小,因为你同时有 pA 和 (*pA<<2),并且它们的减法不等于它应该的值。

感谢任何帮助...

郑重声明,我对打印出指针的实际值不感兴趣,但实际上它的地址被移动了 2 位。而且我不明白正在发生的确切过程。

最佳答案

指针上的算术随其指向的大小而变化。所以当你这样做 pA - 80你的代码实际上是 pA - 80*sizeof(*pA) 。这与<<无关.

您还应该使用 %p 打印地址格式说明符。要将指针值存储在整数类型中,请使用 intptr_tuintptr_t (来自stdint.h)。在编译器上启用警告,如果您不这样做,它应该会提示。

关于c - 需要帮助理解 C 中的左移运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41771294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com