【发布时间】:2011-10-06 17:46:39
【问题描述】:
你有一个 ASCII 字符串代表一个 128 位无符号整数 n,即 0
给出一个算法来提取 n 的二进制表示的最高有效 32 位,并将它们作为它们编码的无符号 32 位整数返回。
有什么快速的方法可以做到这一点,即比实现自己的大数除法和模 2 运算更好的方法。 假设一台 32 位机器,i。 e.你没有 64 位的内置类型。
示例: 为简洁起见,让我们取 4 位整数并提取前 2 位:
2(0010) --> 0(00) 7(0111) --> 1(01) 8(1000) --> 2(10) 13(1101) --> 3(11)
这不是家庭作业问题。更新我的算法技能以进行面试。
【问题讨论】:
-
MSB,整数也是十进制格式。
-
为什么需要最高有效的 32 位?如果只使用最低的 32 位,会不会容易很多?我知道这只是一个面试练习,但我不明白为什么这很重要。
-
澄清一下:你的意思是整数本身的 32 位,而不是它的字符串表示?数字可以有多大 - 最多 + 无穷大?前 32 位要考虑什么 - 从第一个非零位开始?
-
@RocketR 是的,位本身,作为 32 位 int 的结果给出,即该函数将返回单个 int,其位表示与前 32 位相同。
-
@RocketR 假设这些数字是可以放入 128 位的无符号整数。如果我们不给出固定的位大小表示,问题确实变得不清楚。
标签: algorithm bit-manipulation biginteger binary-data