1. 程式人生 > >進位制及相關知識小總結

進位制及相關知識小總結

關於進位制的計算問題
題目:
假設在n進位制下,下面的等式成立,567*456=150216,n的值是(D)
A. 9
B.  10
C.  12
D.  18
首先
(5n^2+6n+7)(4n^2+5n+6)
=20n^4+24n^3+28n^2+25n^3+30n^2+35n+30n+30n^2+36n+42
=20n^4+49n^3+88n^2+71n+42=n^5+5n^4+2n^2+n+6      (1)
兩邊同時對n取餘
42%n=(6%n)=6       (2)     可以排除掉B
兩邊同時除以n再對n取餘
(71+42/n)%n=(1+6%n)%n=1     (3)




巨集定義計算
#define  M(x,y,z)     x*y+z
Void main()
{
int a=1,b=2,c=3;
printf(“%d\n”,M(a+b,b+c,c+a);
a+b*b+c+c+a
}
本來:(1+2)*(2+3)+(3+1)=19     此演算法錯誤
正確演算法     1+2*2+3+3+1=12   
由於此演算法中沒有括號的限制,如果(x)*(y)+(z),則是按照原來的演算法計算,因為沒有括號,則應該按照的優先順序順序計算


關於基本知識
位操作運算子有6個     
~:按位取反
&:按位與     相同位都為1才為1
|:按位或     相同位有1就為1
^:按位異或   相同位不一樣為1
<<:按位左移   按位左移,右邊統一補0    左移後數字會變大2^n
>>:按位右移   按位右,左統一補0        右移後數字會變小2^n
前置++與後置++
前置++:先++再賦值     先對後面的數字進行++運算,再對前面的數字進行賦值
後置++:先賦值再++     先將後面數字的值賦給前面的數字,再進行++運算 
a=0;      b=++a     b=1,a=1
a=0;      b=a++     b=0,a=1


關於while和do while結構
While結構保證迴圈執行0次及以上
Do while結構保證迴圈執行一次及以上
Break不能單獨使用再if語句中
Switch中不允許的型別為浮點型和字串
Switch注意的點:
Case的標籤必須唯一    case b:error 有可能出現標籤一致,因為b是一個變數,不唯一
Switch考點:從哪裡進,從哪裡出
1.表示式的值和標籤值相同時
2.遇到break或switch結束的時候
Case標籤可以隨意放,不一定非要按順序來