#include<stdio.h> #include<stdlib.h> void main(){ unsigned char ch=15; //0000 1111 char的單位是字節,1B=8bit,因此是8位 unsigned char fch=~ch; //1111 0000 取反 unsigned char ffch=~fch;//0000 1111 printf("%d,%d,%d\n",ch,fch,ffch); system("pause"); }
注意:取反運算符不改變操做數的值,賦值運算符纔會改變。面試
#include<stdio.h> #include<stdlib.h> //位與 1,1->1 01,10,00->0 //1&0=0 , 0&0=0 ->清零 //1&1=1 ,0&1=0 ->保留某些位不變 void main0(){ unsigned char ch1=3; //0000 0011 unsigned char ch2=240; //1111 0000 unsigned char ch3=255; //1111 1111 printf("%d\n",ch1&ch2); //0000 0000 0 printf("%d\n",ch1&ch3); //0000 0011 3 printf("%d\n",ch2&ch3); //1111 0000 240 system("pause"); } //位與實現按位清零 void main1(){ unsigned char ch1=255; //1111 1111 unsigned char ch2=15; //0000 1111 unsigned char ch3=240; //1111 0000 printf("%d\n",ch1&ch2); //清零高四位 printf("%d\n",ch1&ch3); //清零低四位 printf("%d\n",ch1&0); //所有清零 system("pause"); } //位與實現取出指定位 void main(){ unsigned char ch=169; //1010 1001 unsigned char ch1=60; //0011 1100 //0010 1000 40 printf("%d\n",ch&ch1); //取出中間四位 system("pause"); }
#include<stdio.h> #include<stdlib.h> //位或運算 1|1=1 1|0=1 0|1=1 0|0=0 void main0(){ unsigned char ch=169; //1010 1001 unsigned char ch1=240; //1111 0000 //1111 1001 249 printf("%d\n",ch|ch1); system("pause"); } //位或運算符能夠讓某些位變成1 1|0 = 1|1 =1 // 0|1=1 0|0=0 與0相或不改變 void main(){ unsigned char ch=169; //1010 1001 unsigned char ch1=15; //0000 1111 //1010 1111 實現低四位所有變1 printf("%d\n",ch|ch1); system("pause"); }
不借助中間變量,實現兩變量交換值spa
#include<stdio.h> #include<stdlib.h> //異或 1^1=0 1^0=1 0^1=1 0^0=0 void main0(){ unsigned char ch1=169; //1010 1001 unsigned char ch2=15; //0000 1111 //1010 0110 166 printf("%d\n",ch2^ch1); system("pause"); } //異或能夠實現反轉 void main1(){ unsigned char ch1=169; //1010 1001 unsigned char ch2=255; //1111 1111 所有反轉 //0101 0110 86 printf("%d\n",ch2^ch1); system("pause"); } void main2(){ unsigned char ch1=169; //1010 1001 unsigned char ch2=60; //0011 1100 指定位反轉(中間反轉) //1001 0101 149 printf("%d\n",ch2^ch1); system("pause"); }
//異或交換兩個變量 //不借助中間變量,實現兩個變量的交換——>面試和嵌入式開發 //x,y交換值 x=x^y;y=x^y;x=x^y /* 等同於加減法實現交換值 x=20,y=10; x=x+y; //x=30,y=10 y=x-y; //x=30,y=20 x=x-y; //x=10,y=20 */ void main(){ unsigned char ch1=20; //0001 0100 unsigned char ch2=10; //0000 1010 printf("%d,%d\n",ch1,ch2); ch1=ch1^ch2; ch2=ch1^ch2; ch1=ch1^ch2; printf("交換以後%d,%d\n",ch1,ch2); system("pause"); }
#include<stdio.h> #include<stdlib.h> void main(){ unsigned char ch1=168; //1010 1000 unsigned char ch2=133; //1000 0101 printf("&與:%d\n",ch1&ch2); //1000 0000 128 printf("|或:%d\n",ch1|ch2); //1010 1101 173 printf("^異或:%d\n",ch1^ch2); //0010 1101 45 unsigned char ch3=~ch1,ch4=~ch2; printf("~反:%d,%d %d,%d\n",ch3,ch4,~ch1,~ch2); system("pause"); }