C 测试整数是否可以表示为n位有符号整数
我一直被困在一个涉及按位操作的C编码难题上 目标是取一个int和若干个n位 然后返回int是否可以表示为n位2s的恭维 限制条件是,您必须能够将原始数字与经过处理的数字进行比较,并且不允许使用加法、减法、乘法、除法和比较 我宁愿不是一个代码解决方案,而是一些想法和可能的推动。 这个难题主要限制你进行除法、模、乘等位运算;以及(,=)是不允许的 比如说 我们得到int 8和n-5 必须对变量x进行一些转换,以便(x==8)在8可以表示为5位2s互补整数时返回trueC 测试整数是否可以表示为n位有符号整数,c,C,我一直被困在一个涉及按位操作的C编码难题上 目标是取一个int和若干个n位 然后返回int是否可以表示为n位2s的恭维 限制条件是,您必须能够将原始数字与经过处理的数字进行比较,并且不允许使用加法、减法、乘法、除法和比较 我宁愿不是一个代码解决方案,而是一些想法和可能的推动。 这个难题主要限制你进行除法、模、乘等位运算;以及(,=)是不允许的 比如说 我们得到int 8和n-5 必须对变量x进行一些转换,以便(x==8)在8可以表示为5位2s互补整数时返回true 我更多的是寻求理解,而不是解决
我更多的是寻求理解,而不是解决方案。因此,将3作为位数:0b1000。减去1。这将生成模式:0b0111 现在测试5:0b101。0b111异或0b101产生0b010。否定结果:0b101。如果结果与您正在测试的数字匹配,那么答案是肯定的 现在测试9:0b1001。0b0111异或0b1001产生0b1110。这不匹配,所以答案是否定的
所以我认为答案是这样的。执行一些位运算,将您的问题转化为等式比较形式,并生成结果。规范“该问题主要限制您进行位移位”不正确。我们需要知道问题的完整陈述,而不是它所说的。当你说“你必须能够将原始数字与……进行比较,并且不允许使用……比较”时,也不清楚。给定一个位数,
n
,计算n
位整数可以表示的不同值的数量上限并不困难。然后,您可以检查该值是否小于或等于n
@WeatherVane:该部分已清除。任务是生成一个int
x
,使得x==t
当且仅当int
t
可表示为n
-位2的补码整数时,才计算为true。在生成x
时不能使用比较。x==t
中的比较超出了生成x
的任务范围,与此无关。添加了特别限制的操作问题是“有符号整数”。在添加最后一段之前,我已进行了评论。但这不是答案,因为它说你不知道该做什么。很有趣。你对这个问题的解释是什么?这就是我们等待的,正确的问题。