【问题标题】:How to print a 5 bit/n bit number in C?如何在 C 中打印 5 位/n 位数字?
【发布时间】:2017-09-10 19:28:51
【问题描述】:

假设我有一些 int x。我只想打印 x 的前 5 位。我怎样才能做到这一点?我听说我可以做类似的事情

printf("%d", x & 0x05);

打印 x 的前五位,但这只是在我的函数中输出 0。

【问题讨论】:

  • 要获取最低的五个位,请写入x & ((1 << 5) - 1)。对于最高五位,还需要使用右移运算符(>>)。
  • 0x05 只是第一位和第三位。低 5 是 0x1f。
  • 掩码 0x05 只会隔离位 0 和 2。要隔离位 0 到 4,请使用掩码 0x1F
  • 如果你做数学,你需要 1f

标签: c bit


【解决方案1】:

如果您使用 GCC、Visual Studio 2015(或更高版本)或 Clang 进行编译,则可以使用 0b(二进制)前缀,这样您就可以看到所需的位掩码,而不是 0x (十六进制)前缀,不太直观。

int x = 127;
printf("%d\n", x & 0b11111000); // Prints 120
printf("%d\n", x & 0b00011111); // Prints 31

这些示例将屏蔽掉 3 个最低有效位(1、2 和 4)或 3 个最高有效位(64、32 和 16),只留下其他 5 个。

如果您使用上面未列出的编译器进行编译,则始终可以导入 BOOST_BINARY 宏。

如果您想查看实际位,那么您可能想查看this question。

【讨论】:

  • 0b 是最新版本的 gcc 和 clang 支持的非标准扩展,但其他编译器通常不支持
  • 嗯。触摸@ChrisDodd。我一直认为这是 C 标准的一部分,但您确实是正确的。我会更新以反映这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2020-07-09
  • 2016-05-23
  • 2022-11-25
  • 2015-10-26
  • 2014-12-14
相关资源
最近更新 更多