c - 有没有办法在 C 中的两个连续内存空间之间移动位?

标签 c bit shift

我试图检索使用“<<”运算符移位整数后丢失的位,因此我创建了一个 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/

相关文章:

python - 如何将数据帧转换为“从-到”对?

cpu功耗和设置位

c - 是否可以按位分配动态内存?

Python:操作字符串中字符中的位

byte - 使用按位运算符判断一个数字是否为 2 的幂 [O(1)]

python - 使用 ord 和 chr 移动字母

c - 预处理 C 代码时出现未终止的无条件指令错误

c - 为什么我的代码给我段错误?

java - 求n次变化后的第K位数字

java - 移动数组中的元素