【问题标题】:What is the max number that you can take by 27 in 32 bits32 位中 27 可以取的最大数字是多少
【发布时间】:2026-01-28 06:10:02
【问题描述】:

我在编码中做一些事情,它将一个数字乘以 1 到 27。我需要做一个故障安全,没有数字可以超过这个。四舍五入到 2^32/2^64 不起作用。它需要是 32 位,因此它可以同时支持 32 位和 64 位操作系统。

【问题讨论】:

  • 我也在lua上。
  • 签名还是未签名?
  • 未签名。但是,已经解决了。
  • 您已表明您的问题已通过接受答案得到解决。您也不应该在标题中添加“已解决”。

标签: math computer-science 32-bit


【解决方案1】:

(2^32/27-1) 不会给你正确的上限值。作为一个整数,它是 159072861,太低了。

可以存储在 32 位中的最大整数值为 2^32 - 1,计算结果为 4294967295。

所以最大值实际上是(2^32 - 1) // 27,即159072862。

注意整数除法的使用,我认为这是你想要的。

【讨论】:

    【解决方案2】:

    如果您想将 3 乘以 5,但知道允许的最大结果是 10,您可以很容易地判断出 3 太大了,因为 3 > 10/5。这就是它的全部内容:)

    既然你坚持使用32位类型,我假设你的编程语言是C,那么int32_t可以表示的最大值是INT32_MAX——这两个来自#include <stdint.h>

    但您对仅限于 32 位类型的假设可能是错误的:int64_t 适用于大多数(如果不是所有)主要 32 位平台 :)

    【讨论】:

    • 我正在使用 lua。
    • 我在 lua 中使用了类似的代码: if tonumber(key) > (2^32/27-1) then print("\nInvalid key. Number too large.") GetMsgAndKey() end
    • 基本上我检查它的数字是否超过最大值(2^32/27-1),然后询问一个新的数字,如果是。
    • 有符号32位整数的最大值是not 2^32!它是 (2^31)-1。因此,测试应该检查 (((2^31)-1) / 27)。这些括号也很重要!
    • 但 lua 默认将所有数字表示为 double 类型,因此您必须检查 lua 所针对的底层 C 平台上 double 的大小。在 PC、MAC、iOS 和 Android 等“大型”系统上,double 是 64 位 IEEE 浮点表示,您提出的测试毫无意义。如果输入的数字可以表示,那么除以 27 的结果也可以表示(非正规可能有问题,但这只是极小数字的问题,所以我想你不会遇到它)。
    最近更新 更多