赋值运算与位运算
求下面程序結果:
來自<<程序員面試寶典>>
?
#include<iostream> using namespace std;int main() {int x=2,y,z;x*=(y=z=5);cout<<x<<endl;x==(y=z);cout<<x<<endl;x=(y==z);cout<<x<<endl;x=(y&z);cout<<x<<endl;x=(y&&z);cout<<x<<endl;y=4;x=(y|z);cout<<x<<endl;x=(y||z);cout<<x<<endl;return 0; }?
打印結果:10 10 1 3 1 7 1?
?
很簡單,但容易出錯。下面來說明一下:
x*=(y=z=5)是把5賦值給y和z,然后就成了x*=5。
x==(y=z)是把z賦值給y,看x與y值是否全等于。但這并不影響x的值,因為這個等式的返回值并沒有賦值
給x。
x=(y==z)是把(y==z)這個式子的返回值賦值給x。
x=(y&z)是把(y&z)的值賦值給x,單個&表示按位&,是用來操作二進制數的。與&&效果一樣,只是&&一般的操作對象是十進制(或其他)。y:0011 ,z:0011。按位&操作后為0011.
x=(y&&z)只要y,z都大于等于1,(y&&z)就為1
x=(y|z),|是按位或,也是用來操作二進制的,與||一樣,只是||一般用來操作十進制(或其他),效果一樣,只要一個為真就為真。y:0100 , z:0011 ,操作后為0111.
x=(y||z)略
?
?
^:按位異或,若兩個二進制相同則為0,不同則為1
~:按位取反,0變1,1變0。存在關系式~x+1=-x
?
#include<iostream> using namespace std;int main() {//~x+1=-xint a=1,b;b=~a;cout<<b<<endl;int c=2;b=a^c;cout<<b<<endl;return 0; }a:0001 ? ?b:0010 ? ? 按位異或結果:0011
?
?
?
?
?
?
?
總結
- 上一篇: 字符串复制中的while条件
- 下一篇: 字符串的循环移动