我试图检索使用“<<”运算符移位整数后丢失的位,因此我创建了一个 int 指针“b”,我用全 1 对其进行了初始化。在地址 b 的左侧,我创建了一个int“a”,我初始化为0。然后,我执行了“*b”的左移并检查了a的值没有改变,那么是否有可能真正在连续的内存空间上移位?
这是我的代码:
int main(){
int a=0;
int *b;
b = &a + 1;
*b=0xffffffff;
*b<<2;
printf("%d\n",a);
return 0;
}
最佳答案
为什么不在换档之前先做相反的换档呢?下面的例子:
#include <stdio.h>
#include <stdlib.h>
int lshift(int var,int nbits, int *lost){
if(lost)
*lost=var>>((sizeof(int)*8)-nbits);
return var<<nbits;
}
int main() {
int n=0xffffdd, // variable n
l, // l for lost
v; // v for result
v=lshift(n,16,&l);
printf( "var n\t= %08X\n"
"result\t= %08X\n"
"lost\t= %08X\n",
n,v,l);
return 0;
}
关于c - 有没有办法在 C 中的两个连续内存空间之间移动位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34837453/