【问题标题】:How to use bitwise operators to isolate bits from unsigned ints in C?如何使用按位运算符将位与 C 中的无符号整数隔离开来?
【发布时间】:2017-09-30 22:18:46
【问题描述】:

这似乎对我很有效,除了这一次。我正在尝试获取此数字的前 10 位

unsigned char c= 17512807u<<22>>22;

我预计这是 359 或 0101100111,但我得到的是 103 或 0001100111。发生这种情况是否有原因?

【问题讨论】:

  • 无符号字符是 8 位,因此只能包含 0 到 255 之间的值。您想要的 359 值不能放入无符号字符中。
  • 0101100111 是 10 位。 unsigned char 是 8(可能)。
  • 假设整数在您的机器中是 32 位,这应该给您低位 10 位,而不是高位(“第一”)10 位。当存储在c 中时,结果将被截断为 8 位(假设为 8 位字符)。
  • 请注意,将u 放在17512807u 中也不错,但不是必需的。

标签: c bit-manipulation bit bits


【解决方案1】:

由于截断为 8 位 unsigned char 值(分配给 c 时),您得到的结果是正确的。

如果您需要一个 10 位宽的值,您应该使用不同的数据类型,例如 uint16_tunsigned int

Reference to C++ integer datatypes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多