【问题标题】:Concatenate 2 16 bit words into one 16 bit word in c在 c 中将 2 个 16 位字连接成一个 16 位字
【发布时间】:2021-03-18 20:17:07
【问题描述】:

我正在尝试获取一个单词的最低有效 4 位和另一个单词的最高有效 12 位,并将它们连接成一个单词。我在 C 中工作,过去我没有用过太多。

int a;
int b;
int c;
int a_masked;
int b_masked;
a = 0x1234;
b = 0xABCD;

a_masked = a & 0X000F;
b_masked = b & 0xFFF0;

c = ((a_masked << 12) || b_masked >> 4);

printf("%d", c);

C 应该是 4ABC,但我的结果是 1。

【问题讨论】:

  • 注意:%x%X 将打印一个十六进制的int,这样可以更容易地查看您的按位操作是否成功。
  • 除了||,在移动 signed 值时注意它(即可能不这样做):stackoverflow.com/q/7622/6372809

标签: c concatenation bit-shift


【解决方案1】:
您使用的

|| 运算符是一个逻辑 OR 运算符,它返回 0 或 1。

您应该使用按位 OR 运算符|(一条垂直线,而不是两条)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2017-12-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多