進制及相關知識小總結

關於進制的計算問題
題目:
假設在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標籤可以隨意放,不一定非要按順序來
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章