亚洲综合在线一区,日韩欧美偷情高潮,久久伊人精品青青草原高清,中文字幕av解说

計算機位運算符與表達示的應用案例

zhushican 3年前 (2022-06-09) 六六互聯 557 0

位操作運算符:參與運算的量,按二進制位進行運算。包括位與(&)、位 或(|)、位 非(~)、位異或(^)、左 移(<<)、右移(>>)六種。 

計算機位運算符與表達示的應用案例

word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微軟雅黑, 黑體, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255); line-height: 2;">案例描述】

word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微軟雅黑, 黑體, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255); line-height: 2;">取火柴游戲的規則為:二人輪流從三堆火柴中取火柴(至少取1根,多取不限)。取到最后一根火柴的即為游戲勝方。

編程實現:給定三堆火柴的數目,程序判斷先手方能否獲勝。

輸入:12 56 33

輸出:先手可勝

輸入:12 45 33

輸出:后手可勝

案例分析】

對于正整數x,y,z,有以下結論:

1、如果x^y^z>0,則:

(1)x,y,z三數中,至少有一個數不是0。

(2)一定可以將其中的一個數減少,使它們的異或為零。如:12,56,33。只需將56減少至45,則12,45,33的異或為零。

2、如果x^y^z=0,則無論改變哪一個數,其異或一定不是零。

因此,先手取勝的條件是:三堆火柴數目的異或非零。

取勝的策略是:減少某一堆火柴的數目,使剩下的三堆火柴數目的異或為零(結論1(2))。這樣一來,無論后手如何應對,輪到先手取火柴時,三堆火柴數目的異或必定非零(結論2)。只要先手遵循”取走火柴后確保三堆火柴數目的異或為零"這一原則,勝定。

【參考代碼】

main()

{unsigned int x,y,z;

 scanf("%d%d%d",&x,&y,&z);

 printf("%s",(x^y^z)>0?"先手可勝":"后手可勝");

}

【案例2描述】

利用加法運算和位運算實現二個正整數的乘法運算。


【案例分析】

以7*5為例,7*5=7*(1+4)=7+7*4=7+(7<<2)

得到m*n的算法如下:

(1)計算初值v=0

(2)如果n=0,計算結束,輸出v

(3)如果n&1,則v=v+m

(4)n>>=1,m<<=1。轉(2)


【參考代碼】

main()

{  int v=0,m,n;

   scanf("%d%d",&m,&n);

   while(n>0)

  {    if(n&1)v+=m;

       n>>=1;

       m<<=1;

   }

   printf("%d",v);

}