Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 测试整数是否可以表示为n位有符号整数_C - Fatal编程技术网

C 测试整数是否可以表示为n位有符号整数

C 测试整数是否可以表示为n位有符号整数,c,C,我一直被困在一个涉及按位操作的C编码难题上 目标是取一个int和若干个n位 然后返回int是否可以表示为n位2s的恭维 限制条件是,您必须能够将原始数字与经过处理的数字进行比较,并且不允许使用加法、减法、乘法、除法和比较 我宁愿不是一个代码解决方案,而是一些想法和可能的推动。 这个难题主要限制你进行除法、模、乘等位运算;以及(,=)是不允许的 比如说 我们得到int 8和n-5 必须对变量x进行一些转换,以便(x==8)在8可以表示为5位2s互补整数时返回true 我更多的是寻求理解,而不是解决

我一直被困在一个涉及按位操作的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
的任务范围,与此无关。添加了特别限制的操作问题是“有符号整数”。在添加最后一段之前,我已进行了评论。但这不是答案,因为它说你不知道该做什么。很有趣。你对这个问题的解释是什么?这就是我们等待的,正确的问题。