如何实现几个字节同事偏移N位(按bit位偏移)?

2019-07-21 06:27发布

比如有一个三个元素的数组,转换成二进制 内容如下  00001111 00001111 00001111  ,让他们同时往左偏移3个bit位  变成 00000001 11100001 11100001  如何用C语言来实现呢?越简短越好谢谢各位网友


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
Jasonlearning
1楼-- · 2019-07-21 08:56
int main() {
        int a[3] = { 0x0f,0x0f,0x0f }, b[3] = {0,0,0};
        int t = 0,tt;
        t |= a[0] << 16;
        t |= a[1] << 8;
        t |= a[2];
        t = t >> 3;
        tt = t;
        printf("0x%x ",t);
        b[0] |= t >> 16;

        tt &= 0xff00;

        b[1] |= tt >> 8;

        t &= 0xff;
        b[2] |= t;
        for (int j = 0; j < 3; j++)
        {
                printf("b[%d]=0x%x ",j,b[j]);
        }
}
nashui_sx
2楼-- · 2019-07-21 10:38
定一个u32 移位?
Yefeng是叶峰
3楼-- · 2019-07-21 13:58
nashui_sx 发表于 2018-12-21 19:11
定一个u32 移位?

是吧几个数据与了然后偏移吗?可是这样的话如果我超过4byte了 就不止32位了
Yefeng是叶峰
4楼-- · 2019-07-21 17:18
 精彩回答 2  元偷偷看……
xiatianyun
5楼-- · 2019-07-21 18:28
本帖最后由 xiatianyun 于 2018-12-22 10:59 编辑

如果元素个数是三个,问题比较简单,可如果个数未知就只能单个右移了。
对以,你要求左移,怎么你右移了呢?

#include <stdio.h>

int main(void)
{
    unsigned char a[3] = {0x0f,0x0f,0x0f};
    unsigned int* p = (unsigned int*)a;
    *p = (*p) >> 3;
   
    printf("右移三位是:%d ", *p);
}

jackielau
6楼-- · 2019-07-21 20:08
"往左偏移3个bit位  变成 00000001 11100001 11100001"这是右偏移

一周热门 更多>