您好我一直在尝试在我的机器组织课程中完成我的作业。 我不得不写代码
/*
* 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)两次获得相同的值,但答案不同。
我是否正确!!? 什么到底怎么办? 〜和!有什么区别? 什么时候适当使用〜以及何时是合适的使用时间!?
答案 0 :(得分:4)
~
翻转数字中的所有位。每次翻转两次,会返回相同的位,因此数字保持不变。
!
在应用于非零操作数时为零,在应用于零时为1。因此,如果操作数是1或0,它将返回相同的操作数。但是当操作数既不是一个也不是零时,它将返回一个而不是原始数字。
所以~~
始终会为您提供原始数字,!!
会为您提供一个或零。
答案 1 :(得分:1)
您首先理解的是xor运算符x^y
是位操作运算符,仅当两个位相等时返回0
,即1^1
和0^0
是0
,而1^0
和0^1
是1
。因此,如果x^y
和x
的所有位相等,则y
为零,否则为非零。
!!
的使用是,单个!
返回0
或1
的整数值,而双!!
则返回相反的值以前的结果。如果你考虑一下,这意味着,零操作数上的!!
返回0
,而非零操作数上的!!
返回1
,完全不需要你。
~
是位非运算符,双~~
返回原始数字,它不仅返回0
或1
。
答案 2 :(得分:1)
!用来得到与事物相反的东西。
相反的是真的是假的 相反的错误是真的
〜用来改变它的所有位。
相反的假是真的(1111 1111 ......不等于零) 相反的真假并非虚假(0000 0001 - > 1111 1110不等于零如此真实且不虚假)
使用!用于逻辑提议和〜用于二进制操作。