運演算法求初值
A. 為什麼用c語言求余求模來把兩位數分離,和賦定時初值
求余和求模操作,在C語言中實際上是同一個操作,即模除運算,符號為%.
a%b其含義為:求a除以b所得余數。
在C語言中,可以使用整型模除和除法配合,來獲取兩位數的個位和十位。
其原理為如下。
對於兩位數x,如果弊模其個位數為b,十位數為a,(0<=a,b<=9)寫成ab的形式,其真值哪卜畢為10a+b。
於是求x的個位數的表達式可以寫成x%10,是因為
x%10 = (10a+b)%10=10a%10+b%10=0+b=b
這里用到了模除相關知識。
對於10a,一定是a的倍數,所以,10a對10取餘一定為0。
而b為0到9的數字,比10小,對10取余時值為本身。
x/10 = (10a+b)/10 = 10a/10 +b/10=a+0 = a
這里用到的是整型除法的知識。
10a/10=a和b/10=0
其中,b<10,對於整型,除法結果只取整數部分,於是b/10=0.
通過以上推理,可以得到,對於10進制二進制數x,x/10為十位數,而x%10為個位數。
至於提問中的賦定時初值,這個沒有要求一定用模除或除法。但有時會要求分段做初始化。比較常見的有兩種。
1 系統為提高效率,或其他的原因,對定時器介面做了分別的封裝,而使其適用於不同量級的定時。比如分別封裝為毫秒級別的和秒級別的。
這樣對於一個超過一秒且帶有毫秒數的定時,就需要分化為秒級和毫秒級兩部分。比如2500毫秒,就需要分化成2秒+500毫秒的形式。
基李芹於兩位數取各個位的同樣原理,對於時間x,可以得到計算秒的表達式為x/1000, 同時計算毫秒的表達式為x%1000。
2 系統對定時器的設置為寄存器形式,分為高位和低位。
以雙位元組16位寄存器為例,對於時間x,可以寫成高位為x/256,和低位為x%256的格式。
事實上,這種寫法是低效的,C語言提供的更高效的位操作同樣可以實現該目的,即
低位為x&0xFF, 高位為((unsigned short)x>>8)&0xFF。由於本項操作與提問關系不大,所以不對其原理進行介紹了。