#include<stdio.h> #include<stdlib.h> //取反的做用:末位清零 取反適用於各類位數不一樣的數據 void main0(){ unsigned char ch=73; //0100 1001 unsigned short sh=16385; //0100 0000 0000 0001 ch=ch&~1;//抹平最後一位 sh=sh&~1; printf("%d,%d\n",ch,sh); system("pause"); } //求餘數,不用求餘運算符 void main(){ unsigned char ch=73; //0100 1001 求出73被4整除的餘數 //首先,將73換爲2進制數,而後抹平最後兩位(抹平後的數就能夠整除4了) printf("%d\n",ch-(ch&~3));// ch&~3 抹平最後兩位 system("pause"); }
#include<stdio.h> #include<stdlib.h> void main(){ //printf不會進行類型轉換 printf("%d\n",10.3);//printf無論是什麼類型,按照%d,%f解析數據,不一樣的解析方式有不一樣的結果 printf("%f\n",10); printf("%d\n",(int)10.3); printf("%f\n",(float)10); system("pause"); }
char ch=1,ch1='1';//字符與編號的區別 printf("%d,%d\n",ch,ch1); system("pause");
#include<stdio.h> #include<stdlib.h> void main(){ int x=4294967295; int y=-1; //1111 1111 1111 1111 1111 1111 1111 1111 在內存中的存儲方式 //無符號,沒有符號位,全都是數據 4294967295 //0000 0000 0000 0000 0000 0000 0000 0001 1原碼 //1000 0000 0000 0000 0000 0000 0000 0001 -1原碼 //1111 1111 1111 1111 1111 1111 1111 1110 -1反碼 //1111 1111 1111 1111 1111 1111 1111 1111 -1補碼 printf("%d,%u\n",x,x); printf("%d,%u\n",y,y); system("pause"); }
unsigned int num=-1; //1111 1111 1111 1111 1111 1111 1111 1111 內存的存儲方式 printf("%d,%u\n",num,num);
#include<stdio.h> #include<stdlib.h> //左移一位等於*2 void main(){ unsigned char ch=1; //0000 0001 1 printf("%d\n",ch<<1); //0000 0010 2 printf("%d\n",ch<<2); //0000 0100 4 // ch<<2 CPU寄存器計算 printf("%d\n",ch); //移位不改變原值 printf("%d\n",ch=(ch<<2));//經過賦值號改變原值 system("pause"); }
//左移要注意溢出,考慮數據的極限 void main0(){ unsigned char ch=1; //0000 0001 1 //ch=ch<<7; //1000 0000 128 ch=ch<<8; //10000 0000 溢出,爲0 printf("%d\n",ch); //溢出後的數據沒法讀取 system("pause"); }
#include<stdio.h> #include<stdlib.h> //右移一位等於÷2 void main(){ unsigned char ch=128; //1000 0000 printf("%d\n",ch>>1); printf("%d\n",ch>>2); printf("%d\n",ch); printf("%d\n",ch=ch>>5); system("pause"); }
#include<stdio.h> #include<stdlib.h> void main(){ int x=9999; //10 0111 0000 1111 int i=0; while (x) { i++; x=x&(x-1);//每次操做清零一個「1」,用於統計二進制整數有多少個1 } printf("%d\n",i); system("pause"); }
返回值爲8spa