今天做题遇到了一道题如下:
int x=3,y=6,z=0;
z = x ^ y << 2;
那么z的值等于多少呢?它的二进制又是多少呢?
这一道题就涉及到了按位异或(^)运算符和左移运算符<<
接这个式子的优先顺序是先计算y<<2,再计算x^y。
那么就理解一下y<<2等于多少?
左移运算符
简单的理解就是将10进制换成2进制,然后再整体左移N位数,补位0。
例如000101 左移两位就为010100。
右移同理
1.按位异或(^)
y=6,可以将6转换为2进制为00110,那么左移两位就为11000,其十进制为24。
那么就接着计算x^y了,x的二进制为00011,y的二进制为11000,得以下公式
`00011^11000`该公式的答案是多少呢?
答案就是11011,十进制为27。
按位异或的理解就是,两个二进制进行比较。例如11000
00011,若两个结果值有差异的话,则为1。否则为0,不足位补0。
2.按位与(&)
若使用按位与来对该题进行计算的话,题干为z=x&y<<2,那么结果就由11000
00011进行比较,若两个数值有差异则为0,若都为0,也为0。所以结果就为0。
3.按位或(|)
若使用按位或来对该题进行计算的话,题干为z=x|y<<2,那么结果就有11000
00011进行比较,若两个数值有一个为1的话,结果则为1。所以结果为11011。