和...之间的不同 !和〜在C中的isNotEqual函数

时间:2014-03-28 01:13:14

标签: c bit-manipulation

您好我一直在尝试在我的机器组织课程中完成我的作业。 我不得不写代码

/*    
 *   Examples: isNotEqual(5,5) = 0, isNotEqual(4,5) = 1
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 6
 *   Rating: 2
 */
经过一番思考,我意识到要编写代码

int isNotEqual(int x, int y) {
  return x^y;
}

但它没有用。经过一番搜索,我发现了一个类似于我的代码,但有!!在x ^ y前面。

int isNotEqual(int x, int y) {
  return !!(x^y);
}

找到这段代码后,我尝试了它并且有效。所以我尝试了同样的事情但是在前面~~但它没有用。我认为 !不仅仅意味着&#34;不是&#34;但它也做了别的事情。这就是我们做的原因!! (不是+ not = yes)两次获得相同的值,但答案不同。

我是否正确!!? 什么到底怎么办? 〜和!有什么区别? 什么时候适当使用〜以及何时是合适的使用时间!?

3 个答案:

答案 0 :(得分:4)

~翻转数字中的所有位。每次翻转两次,会返回相同的位,因此数字保持不变。

!在应用于非零操作数时为零,在应用于零时为1。因此,如果操作数是1或0,它将返回相同的操作数。但是当操作数既不是一个也不是零时,它将返回一个而不是原始数字。

所以~~始终会为您提供原始数字,!!会为您提供一个或零。

答案 1 :(得分:1)

您首先理解的是xor运算符x^y是位操作运算符,仅当两个位相等时返回0,即1^10^00,而1^00^11。因此,如果x^yx的所有位相等,则y为零,否则为非零。

!!的使用是,单个!返回01的整数值,而双!!则返回相反的值以前的结果。如果你考虑一下,这意味着,零操作数上的!!返回0,而非零操作数上的!!返回1,完全不需要你。

~是位非运算符,双~~返回原始数字,它不仅返回01

答案 2 :(得分:1)

!用来得到与事物相反的东西。

相反的是真的是假的  相反的错误是真的

〜用来改变它的所有位。

相反的假是真的(1111 1111 ......不等于零)  相反的真假并非虚假(0000 0001 - > 1111 1110不等于零如此真实且不虚假)

使用!用于逻辑提议和〜用于二进制操作。