【发布时间】:2012-04-23 04:57:43
【问题描述】:
我正在研究一个函数,该函数基本上可以查看两个整数中的哪一个更大。传递的参数是2 32 位整数。诀窍是唯一允许的运算符是! ~ | & << >> ^(没有强制转换,除了有符号的int、*、/、-等其他数据类型)。
到目前为止,我的想法是将^ 两个二进制文件放在一起,以查看它们不共享的1 值的所有位置。然后我想要做的是取那个值并隔离最左边的1。然后看看其中哪一个有这个价值。那么该值将更大。
(假设我们使用 8 位整数而不是 32 位)。
如果传递的两个值是01011011 和01101001
我在他们身上使用了^ 来获得00100010。
然后我想使它成为00100000 换句话说01xxxxxx -> 01000000
然后&它与第一个数字
!! 结果并返回。
如果是1,那么第一个#更大。
对如何01xxxxxx -> 01000000 或其他任何帮助有什么想法吗?
忘了注意:没有 ifs、whiles、fors 等...
【问题讨论】:
-
“然后我想将其设为 00100000,即 01xxxxxx-> 01000000”是什么意思?如何从 00100000 得到 01xxxxxx?
-
哦,来吧...你能用什么?可以用三元条件吗?
-
不,不是三元,它教我们如何从本质上创建构建块
-
我的意思是你从 01xxxxxx 得到 01000000 其中 x 可能是 0 或 1
-
在有符号整数中按位处理是可疑的。 C 标准没有为负数指定任何特定的二进制表示。现实世界的表示几乎总是二进制补码,但一些编译器(例如 GCC)利用不确定性进行优化。由于这个标志显然很重要,这至少是一个潜在的问题。
标签: c binary bit-manipulation