这两者有什么区别吗?
如果没有,那么为什么|=我们可以使用更知名的+=呢?我认为这可能只是为了方便,陪伴&=,我认为没有替代方案.
我们知道我们可以使用按位运算符来划分任意两个数字.例如:
int result = 10 >> 1; //reult would be 5 as it's like dividing 10 by 2^1
Run Code Online (Sandbox Code Playgroud)
我们有没有机会使用位操作将数字除以0?
编辑1:如果我改写我的问题,我想实际将数字除以零并破坏我的机器.我怎么做?
编辑2:让我们暂时忘掉Java.无论使用何种编程语言,机器是否可以将数字除以0?
编辑3:由于实际上不可能这样做,有没有办法我们可以使用接近0的非常小的数字来模拟这个?
另一个编辑:有人提到CPU硬件阻止除以0.我同意,没有直接的方法来做到这一点.让我们看一下这段代码:
i = 1;
while(0 * i != 10){
i++;
}
Run Code Online (Sandbox Code Playgroud)
我们假设最大值没有上限i.在这种情况下,没有编译器错误,CPU也不会抵制这一点.现在,我希望我的机器能够找到与0相乘的数字给出一个结果(显然永远不会发生)或者尝试死亡.
所以,有一种方法可以做到这一点.如何通过直接操作位来实现这一目的?
最终编辑:如何在不使用按位运算符的情况下在Java中执行二进制除法?(对不起,这纯粹与标题相矛盾).
注意:我尝试用0模拟divison并发布了我的答案.但是,我正在寻找一种更快的方法.
有什么区别~i和INT_MAX^i
两者给出相同的没有.在二进制,但当我们打印否.输出不同,如下面的代码所示
#include <bits/stdc++.h>
using namespace std;
void binary(int x)
{
int i=30;
while(i>=0)
{
if(x&(1<<i))
cout<<'1';
else
cout<<'0';
i--;
}
cout<<endl;
}
int main() {
int i=31;
int j=INT_MAX;
int k=j^i;
int g=~i;
binary(j);
binary(i);
binary(k);
binary(g);
cout<<k<<endl<<g;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我把输出作为
1111111111111111111111111111111
0000000000000000000000000011111
1111111111111111111111111100000
1111111111111111111111111100000
2147483616
-32
Run Code Online (Sandbox Code Playgroud)
为什么k和g不同?
c++ bit-manipulation bit-shift bitwise-operators bitwise-xor
我已经编写并编译了以下代码:
void main()
{
printf("%d", -10 & 5);
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它输出值4。为什么该程序的输出为4?
c bit-manipulation operators bitwise-operators negative-number
我刚刚在SO上找到了答案,其中一个代码示例(我认为是java)使用了一个我以前从未见过的运算符:^=.我搜索谷歌和SO并且无法在其他任何地方找到它,当我尝试使用java测试时,eclipse发疯了.也许这只是答案中的一个错字,我不确定.这个运营商是什么?它有名字吗?它的用语是什么?