C语言bit赋值

Coder802 2017-08-24 04:08:05
我在用C语言写编码的程序,当某个参数的值为P时,要向解码其传递两个比特的数11.
请问在C语言中如何产生这个两个比特的数。
...全文
931 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jena_wy 2017-08-25
  • 打赏
  • 举报
回复
用0x3&数就是两位。
Remove_ 2017-08-25
  • 打赏
  • 举报
回复
& | 操作可以提出你想要的任何一位上的值。
Chen_QiDian 2017-08-25
  • 打赏
  • 举报
回复
传递 int a = 3; // 二进制11 解码 int a1 = a & 0x10; // 取高位 int a2 = a & 0x01;// 取低位
zwfgdlc 2017-08-25
  • 打赏
  • 举报
回复
如果你是用VS2015,可以这样
int a = 0b11;
自信男孩 2017-08-24
  • 打赏
  • 举报
回复
#include <stdio.h>

struct num {
    unsigned int a:2;
};
int main(void)
{

    struct num n;
    n.a = 3;

    printf("%x\n", n.a);
    return 0;
}
试试类似这样的。
赵4老师 2017-08-24
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>

#define WIRTE_UINT(des ,x ,pos ,len)  (                                   \
    (des)                                                                 \
    &                                                                     \
       ~(                                /* 除要修改的位为0,其余都为1 */ \
            (                                                             \
                (1<<(len))-1             /* 长度为len位的1             */ \
            )                                                             \
            <<(32-(pos)-(len))           /* 左移32-(pos)-(len)位       */ \
        )                                                                 \
    |                                                                     \
        (                                                                 \
            (x)                                                           \
            <<(32-(pos)-(len))                                            \
        )                                                                 \
)
#define READ_UINT(src ,pos ,len)      (                                   \
    (                                                                     \
        (                                                                 \
            (unsigned)(src)                                               \
        )                                                                 \
        >>(32-(pos)-(len))               /* 逻辑右移32-(pos)-(len)位   */ \
    )                                                                     \
    &                                                                     \
    (                                                                     \
        (1<<(len))-1                     /* 长度为len位的1             */ \
    )                                                                     \
)

int main()                              //                1111111111222222222233
{                                       //bit   01234567890123456789012345678901
    unsigned int des = 0x661;           //      00000000000000000000011001100001
    unsigned int r;

    des = WIRTE_UINT(des ,3 ,28 ,2);    //      00000000000000000000011001101101
    printf("des==0x%08X\n",des);
	r =	READ_UINT(des ,28 ,2);
    printf("r==%d\n",r);
    return 0;
}
//des==0x0000066D
//r==3
kuangbao9 2017-08-24
  • 打赏
  • 举报
回复
你可以传一个字节呀,然后取出你要的两位就好了呀。比如你想取出低两位,可以这样(0x67 & 0x03)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧