Chinaunix

标题: 如何用bis,bic(位清除,位设置)实现或,异或 [打印本页]

作者: lpzgbd    时间: 2010-12-05 20:36
标题: 如何用bis,bic(位清除,位设置)实现或,异或
现在有两个函数bis,bic。bis的功能是位设置,bic的功能是位清除。申明为:
int bis(int x ,int m)
int bic(int x ,int m)
参数m为掩码,对于bis,就是在m为1的每个位置,修改x的对应位为1,并返回修改后的值。同理,对bic,修改x的对应位为0后返回。

问题是:
如何在C语言中只使用bis,bic来实现|和^运算,而不使用任何其他c语言运算,下面的?处该怎么填。

谢谢

  1. int boor_or(int x,int y)
  2. {
  3.     int result = ?;
  4.     return result;
  5. }

  6. int boor_xor(int x ,int y)
  7. {
  8.   int result = ?;
  9.   return result;
  10. }

复制代码

作者: rubylc_unix    时间: 2010-12-05 21:47
本帖最后由 rubylc_unix 于 2010-12-05 22:22 编辑

回复 1# lpzgbd

  1. [code]int bis(int x ,int m)
  2. int bic(int x ,int m)


  3. int boor_or(int x,int y)
  4. {
  5.      int result = ?;
  6.      return result;
  7. }


  8. int boor_xor(int x ,int y)
  9. {
  10.   int result = ?;
  11.    return result;
  12. }
复制代码
你看看这样行不?
boor_or实现
result = bis( bis(0, x), y);[/code]
作者: lpzgbd    时间: 2010-12-05 22:19
回复 2# rubylc_unix


    只要不引入其他任何运算就行了。
你这个相当于是bis(x,y)

那bool_xor如何实现呢。
作者: rubylc_unix    时间: 2010-12-05 22:21
回复 3# lpzgbd


    呵呵,这个我暂时还没有想到。{:3_189:} ,坐等高手解决阿
作者: Etrnls    时间: 2010-12-06 00:34
允许
bool_not写成bic(0x很多f, x)不
可以的话就可以
x and y = not(not(x) or not(y))
x xor y = (x and not(y)) or (not(x) and y)
作者: pagx    时间: 2010-12-06 00:36
bis(bic(x, y), bic(y, x))
作者: jerryz920    时间: 2010-12-06 00:46
or + not = everything
作者: Etrnls    时间: 2010-12-06 00:49
or + not = everything
jerryz920 发表于 2010-12-06 00:46


但是not挺麻烦的,还是你楼上的简单,bic其实就是x and not(y)
先去凑not结果反而更复杂了……
作者: jerryz920    时间: 2010-12-06 00:56
回复 8# Etrnls


    是的,构造方法很多的~

    已经过了学数理逻辑时那疯狂的年代了,看着还挺怀念的~
作者: rubylc_unix    时间: 2010-12-06 08:36
bis(bic(x, y), bic(y, x))
pagx 发表于 2010-12-06 00:36



    NICE!
作者: lpzgbd    时间: 2010-12-06 19:19
bis(bic(x, y), bic(y, x))
pagx 发表于 2010-12-06 00:36



    有道理。是应该这么写。谢谢了。
作者: lpzgbd    时间: 2010-12-06 19:20
回复 5# Etrnls


    帅哥。你是怎么想到这样的构造方法的呢。有什么方法吗?
作者: lpzgbd    时间: 2010-12-06 19:31
也想问下各位朋友,怎么解这样的问题呢。
作者: rubylc_unix    时间: 2010-12-07 09:32
回复 13# lpzgbd


    计算机运算阿,其实最早就是拨动开关,其实估计就是你的那2个函数了。里面有基本的门器件比如与或非门,与门可以用或非门得到。异或可以用与或非门得到,只要会了这2个的实现,其他的就可以解决阿。楼上有个兄弟说得不错,或非实现everything




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2