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