讀了魚鷹哥的筆記 學習了
普通循環(huán)
除了常用的for,一般可以用
temp = (temp++)&0x07;//實現(xiàn)0-7遞增循環(huán)
但這種方法只能實現(xiàn)bit的最大位上的范圍(7,31...)
而%則是任意范圍內(nèi)的循環(huán)
temp = (temp++)%6;//實現(xiàn)0-5的循環(huán) 注意這里是6
今天大華的測評就有這道題,num%1024也可以通過num__(1024-1)實現(xiàn),參考上面的知識點,這個空就應該是&
距離計算
如何在有限的位數(shù)里面獲得兩個數(shù)據(jù)之間準確距離信息呢。以8bit為例,最大數(shù)為255,第一次讀取為0x4,第二次讀取是0x9,那么從0x04變化到0x09,變化了幾次(遞增數(shù)為1)? 9 – 4 = 5,如果變化后的數(shù)小于255當然好辦,但是超過了255,又從0開始遞增呢?252、253、254、255、0、1,這里可以看出是6,但是該怎么計算。 參考循環(huán)隊列的知識,可以得出以下結論。
length = (num2 – num1 + max)%max;
個人感覺就像是運動員跑圈,一個快一個慢,不論快的跑了多長距離,只要知道他當前圈內(nèi)位置和慢的當前圈內(nèi)位置減一下就行,也就是((快的總路程)%(一圈長度) - (慢的總路程)%(一圈長度) ),合并一下就是上述公式,括號內(nèi)+max是為了防止(num2 -num1) < max的情況。
而根據(jù)我們可以得出距離的這個原理,我們也可以實現(xiàn)范圍內(nèi)的自減
//數(shù)據(jù)自減
num--;
//當數(shù)據(jù)越界后 當作循環(huán)隊列 重新判斷距離 實現(xiàn)9-0之間的自減
//數(shù)據(jù)未越界 則不會發(fā)生變化
num = (num+10)%10;
如果是0自減為255(無符號情況),也可以視作-1,原理是一樣的,所以也是通用的。