【问题标题】:smallest unsigned int that can contain the positive values of a given signed integral?可以包含给定有符号整数的正值的最小无符号整数?
【发布时间】:2015-05-14 04:16:30
【问题描述】:

可以在编译时确定可以包含给定有符号整数类型的正值的最小无符号整数吗?

所以最小的无符号整数类型足够大以容纳给定有符号整数类型的最大值。

【问题讨论】:

  • 这取决于您所说的“最小”是什么意思,因为某些整数类型可以具有相同的大小。例如,考虑一个系统,其中intlong 具有相同的大小和值范围。你的问题的答案是longunsigned intunsigned long,还是可以?

标签: c++ templates c++11 integral


【解决方案1】:

一个好的起点是 2 是基数,我们需要考虑基于 2 的对数。一般规则:

  1. 如果一个无符号整数有sizeofn个字节,那么最大的正数是(2^(8 * n)) - 1

  2. 如果一个有符号整数有sizeofn个字节,那么最大的正数是(2^(8 * n - 1)) - 1

因此,您需要确定sizeof一个给定类型的变量,并查看它是否有符号。

【讨论】:

  • 每个有符号类型都有对应的无符号类型;并且该类型被定义为能够存储所有带符号类型的非负值,因此这些都不是必需的。
  • 我相信了解实际的力学和公式既有趣又有用。
  • 我会重新审视你的数学。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2013-10-02
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2013-08-29
  • 2014-03-07
相关资源
最近更新 更多