操作符實例講解

一、操作符
1、算數操作符: +(加)       -(減)      * (乘)    / (除)    % (取模)
2、移位操作符:<<(左移)      >>(右移)
3、位操作符‘:   &(按位與)     | (按位或)   ^(按位異或,相同爲0,不同爲1) 
4、關係操作符: <(小於)   >(大於)  ==(等於)  !=(不等於)  <=(小於等於或不大於)  >=(大於等於或不小於) 
5、單目操作符:!(邏輯反操作) -(負值)  +(正值)   &(取地址)   ~(二進制按位取反)   --(自減)  ++(自增) 
        *(間接訪問操作符)   sizeof(操作數的類型長度,以字節爲單位)
6、條件操作符:    表達式1?表達式2 :表達式3  (三目操作符   列:a=5>3(表達式1) 5(表達式2): 3(表達式2);5>3 成立a=5,不成立a=3)
7、賦值操作符:  =(賦值)
8、邏輯操作符:&&(邏輯與)         ||(邏輯或)


1、算數操作符實例:

#include<stdio.h>
#include<stdlib.h>
int main()
{
 int num1=3;
 float num2=3.3;
 double num3=3.5;
 printf("整型num1=%d\t單精度浮點型num2=%f\t雙精度浮點型num3=%lf\n",num1,num2,num3);
 printf("\n整型除法num1/2=%d\n",num1/2);//整數除法
 printf("整型除以浮點數運算num1/2.0=%d\n",num1/2.0);//(輸出整型,浮點數運算)錯誤結果0
 printf("整數浮點型輸出num1/2=%f\n",num1/2);//整型運算,後轉換成浮點型數輸出
 printf("整數除以浮點型數,浮點型輸出num1/2.0=%f\n",num1/2.0);//整型數浮點型運算輸出,至少有一變量爲浮點型,2.0即爲浮點型數
 printf("\n單精度浮點型運算輸出num2/2=%f\n",num2/2);//單精度浮點型除法
 printf("雙精度浮點型運算輸出num3/2=%lf\n",num3/2);//雙精度浮點型除法
 printf("浮點型轉換整型運算整型輸出(int)num3/2=%d\n",(int)num3/2);//浮點型強制轉換成整型除法運算後輸出
 printf("浮點型運算整型輸出num3/2=%d\n",num3/2);//浮點型除法,轉換成整型輸出,結果錯誤
 printf("\n整型取模運算num1%%2=%d\n",num1%2);//取模運算僅能爲整運算,注%%表示打印%
 printf("浮點型轉換整型取模運算(int)num2%%2=%d\n",(int)num2%2);//整型變量強制轉換成整型,變量僅保留整數部分,可進行取模運算
 //printf("%d\n",num2%2);//浮點數不可進行取模運算
 system("pause");
 return 0;
}


注意:浮點型運算輸出,至少有一變量爲浮點型數( printf("整數除以浮點型數,浮點型輸出num1/2.0=%f\n",num1/2.0);//整型數浮點型運算輸出,至少有一變量爲浮點型,2.0即爲浮點型數)
           取模運算必須是整型運算

2、移位操作符:

左移符:<<     (列:(5<<2)5--->0101左移2位爲:010100--->20)
右移符:>>     (列:(5>>2)5--->0101右移2位爲:0001----->1)
應用:

//判斷一個數是正數還是負數
#include<stdio.h>
#include<stdlib.h>
int main()
{
 int num=01;
    printf("輸入數字:");
 scanf("%d",&num);
 if((num>>31)&1)//32位最高位表示正負數,1表示負數,0表示正數
  printf("負數\n");
 else
  printf("正數\n");
 system("pause");
 return 0;
}


//1.寫一個函數返回參數二進制中 1 的個數
#include<stdio.h>
#include<stdlib.h>
int count_one_bit(int num);
int main()
{
 int num=0;
 int count=0;
 printf("輸入數字:");
 scanf("%d",&num);
 count=count_one_bit(num);
 printf("二進制爲一的有%d位\n",count);
 system("pause");
 return 0;
}
int count_one_bit(int num)
{
 int n=0;
 int i=0;
 int num1=num;
 while(num1>0)
 {
     num1=num>>i;
 if((num1&1)==1)
 {
  n++;
 }
 i++;
 }
 return n;
}


//2.獲取一個數二進制序列中所有的偶數位和奇數位,分別輸出二進制序列。

#include<stdio.h>
#include<stdlib.h>
void bit_search(int num);
int main()
{
 int num=0;
 printf("輸入數字:");
 scanf("%d",&num);
 bit_search(num);
 system("pause");
 return 0;
}
void bit_search(int num)
{
 int n1=15;//奇數位下標
 int n2=15;//偶數位下標
 int i=0;//移位變量
 int bit_odd[16]={0};//保存二進制數,奇數位最多有16位(共32位)
 int bit_even[16]={0};
 int num1=num;//移位後數值,用於判斷終止
 while(num1>0)
 {
  num1=num>>i;
  if(i%2==0)
  {
  bit_odd[n1]=(num1&1);
  n1--;
  }
  else
  {
   bit_even[n2]=(num1&1);
   n2--;
  }
  i++;
 }
 printf("奇數位二進制:");
 for(i=0;i<16;i++)
 printf("%d",bit_odd[i]);
 printf("\n偶數位二進制:");
 for(i=0;i<16;i++)
 printf("%d",bit_even[i]);
}

//兩個int(32位)整數m和n的二進制表達中,有多少個位(bit)不同?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int compare(int num1,int num2 );
int main()
{
 int num1=0;
 int num2=0;
 int count=0;
 printf("輸入數字num1:");
 scanf("%d",&num1);
 printf("輸入數字num2:");
 scanf("%d",&num2);
 count=compare(num1,num2);
 printf("有%d位不同\n",count);
 system("pause");
 return 0;
}

int compare(int num1,int num2)
{
   int i=0;
   int n=0;
   //保證爲正數比較,計算機存儲的是二進制的補碼,正數補碼=原碼,負數補碼=原碼取反+1
   num1=sqrt(pow(num1,2.0));//sqrt開根號函數,qow次方函數。注:qow函數至少有1個數是浮點數運算
   num2=sqrt(pow(num2,2.0));
   for(i=0;i<32;i++)
   {
    if(((num1>>i)&1)!=((num2>>i)&1))//比較位是否相同
     n++;
   }
   return n;
}


3、位操作符:
&:與運算,有0即爲0。即1&1=1,1&0=0,0&0=0
|: 或運算,有1即爲1。即1|1=1,1|0=1,0|0=0
^:異或,相同爲0不同爲1。即1^1=0,1^0=1,0^0=0

注:計算機中存儲的是數值的二進制的補碼;
正數補碼=原碼;列:5--->0101
負數補碼=原碼取反+1  列:5--->0101---(取反)-->1010---(加1)--->1011(-5補碼)
&的應用可看上面移位操作符的案例(|的使用與之類似)
^的應用可交換兩個變量。
   ^交換兩個變量       算數操作符交換兩個變量
列:a=a^b;                  a=a+b;
       b=a^b;//b=a          b=a-b;//a
       a=a^b;//a=b          a=a-b;//b
具體案例可訪問:http://blog.csdn.net/wejboke626/article/details/78058248


4、邏輯操作符:

&&:邏輯與,表達式1&&表達式2;表達式1不成立時,結果不成立,不在運算表達式2。表達式1成立時,運算表達式2。
||:邏輯或,表達式1||表達式2;表達式1成立時,結果成立,不在運算表達式2。表達式1不成立時,運算表達式2


5、單目操作符:

sizeof:操作數的長度,以字節爲單位。 列:sizeof(數組名arr)/sizeof(arr[0]);//求數組大小(多少個元素)
++:自增,a++等於a=a+1。  ++a先加一運算後賦值
--:自減,a--等於a=a-1。--a先減一運算後賦值

例:
#include<stdio.h>
#include<stdlib.h>
int main()
{
 int num1=0;
 int num2=0;
 int num3=0;

 num2=num1++;//先將num1賦給num2,後num1加1。即num2=0,num1=1;
 num3=++num2;//先num2加1,後將num2值賦給num3。即num2=1,num3=1;

 printf("num1=%d\tnum2=%d\tnum3=%d\n",num1,num2,num3);
 system("pause");
 return 0;
}
 
6、關係操作符與賦值操作符 
賦值操作符(=)與關係操作符(==)不可寫錯,在判斷語句中最好將常量數值放在左邊,從而便於查找此錯誤(列:if(1==a)...)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章