取模運算性質_求余、取模運算在RTOS中計算優先級的理解

uCOS3中的部分源碼:

/* 置位優先級表中相應的位 */

void OS_PrioInsert (OS_PRIO prio)

{

CPU_DATA bit;

CPU_DATA bit_nbr;

OS_PRIO ix;

/* 求模操作,獲取優先級表數組的下標索引 */

ix = prio / DEF_INT_CPU_NBR_BITS;//32bits

//由于數據均為無符號數,prio為8位無符號數、 DEF_INT_CPU_NBR_BITS為32位無符號數

ix的值為0 這么做是未來兼容優先級>32個的數量要求(此處8/32得0)

/* 求余操作,將優先級限制在DEF_INT_CPU_NBR_BITS之內 *///CPU_DATA unsigned int

這個沒有問題對變量 prio進行求值賦值給

bit_nbr = (CPU_DATA)prio & (DEF_INT_CPU_NBR_BITS - 1u);

這個沒有問題,對形參prio進行求值賦值給 bit_nbr

/* 獲取優先級在優先級表中對應的位的位置 */

bit = 1u;

bit <<= (DEF_INT_CPU_NBR_BITS - 1u) - bit_nbr;

/* 將優先級在優先級表中對應的位置1 */

OSPrioTbl[ix] |= bit;

}

/* 清除優先級表中相應的位 */

void OS_PrioRemove (OS_PRIO prio)

{

CPU_DATA bit;

CPU_DATA bit_nbr;

OS_PRIO ix;

/* 求模操作,獲取優先級表數組的下標索引 */

ix = prio / DEF_INT_CPU_NBR_BITS;

/* 求余操作,將優先級限制在DEF_INT_CPU_NBR_BITS之內 */

bit_nbr = (CPU_DATA)prio & (DEF_INT_CPU_NBR_BITS - 1u);

/* 獲取優先級在優先級表中對應的位的位置 */

bit = 1u;

bit <<= (DEF_INT_CPU_NBR_BITS - 1u) - bit_nbr;

/* 將優先級在優先級表中對應的位清0 */

OSPrioTbl[ix] &= ~bit;

}

********************************數據類型的宏定義***************************************

#define DEF_INT_CPU_NBR_BITS (CPU_CFG_DATA_SIZE * DEF_OCTET_NBR_BITS)

#define CPU_CFG_DATA_SIZE CPU_WORD_SIZE_32

#define CPU_WORD_SIZE_32 4u

#define DEF_OCTET_NBR_BITS 8u

******************************************************************************************

typedef CPU_INT08U OS_PRIO;

typedef unsigned char CPU_INT08U;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%以下為網絡上的資料:

(參考維基百科:

Euclidean division:Given two integers a and b, with b ≠ 0, there exist unique integers q and r such that a = bq + r and 0 ≤ r < |b|, where |b| denotes the absolute value of b.

(術語: a 被除數 dividend ; b 除數 divisor;q 商 quotient;r 余數 remainder)

按照上面的定義:余數唯一并始終大于或等于0,并可以拓展到兩個整數為正數或負數的情況。

但是,程序設計語言求余算法并不是按照上面的定義來執行。

我們引出另一種余數定義:a = bq + r and 0 <= |r| < |b| 。于是,我們可以發現這種情況下余數可能不止一個。

例子:a = 43 b = 5時:

43 = 5 * 8 + 3 : q = 8;r = 3 (r > 0)

43 = 5 * 9 - 2 : q = 9;r = -2 (r < 0)

當a 和 b 含有負數時也存在這兩種余數。

例子:a = 43 b = -5時:

43 = -5 * -8 + 3 : q = -8;r = 3 (r > 0)

43 = -5 * -9 - 2 : q = -9;r = -2 (r < 0)

大多數程序設計語言要求余數與被除數的正負號相同(參考自《C陷阱與缺陷》,強調了程序的可移植性問題,即被除數或除數含有負數時要謹慎對待)。這說明不同程序設計語言實現時對上述例子求余時可能是上面不同的解。

二、取模運算 (Modulo)

In computing, the modulo operation finds the remainder after division of one number by another (sometimes called modulus).

上面這句話說明,取模運算和求余運算的目標都是一致的。只是不同程序設計語言時實現的方式可能不同,也就是上面所說的采用另一種余數定義時,含有兩種余數結果。一些語言可能會采取第一個結果;另一些語言可能會采取第二個結果;還有些語言可能會把取模和求余分開定義,分別采取兩種結果。維基百科里面就列出了一些程序設計語言采取的操作,常見的為以下幾種:

1.求余結果或取模結果的正負號與被除數相同;

2.求余結果或取模結果的正負號與除數相同;

3.求余結果或取模結果的總是正數;

4.求余結果或取模結果由實現定義;

5.求余結果或取模結果為最接近0的數;

求余運算和取模運算小結:有人會把取模運算和求余運算分開解釋,又采用特定的語言去舉例,我認為這兩種運算目標都是一致,只是求余運算傾向于數學,而取模運算傾向于計算機科學,之所以不同語言會有不同的結果,本質是因為根據求余運算定義導致余數不唯一時不同程序設計語言采用了不同的結果,但他們都會根據某種依據來給出唯一的結果。這也告訴我們,程序移植時必須當心這種差別,特別是當兩個整數含有負數的情況。

三、取模運算性質

術語:

For a positive integer n, two integers a and b are said to be congruent modulo n, and written as

一些有用的性質(可證明):

如果a≡b(mod m),x≡y(mod m),則a+x≡b+y(mod m)。

如果a≡b(mod m),x≡y(mod m),則ax≡by(mod m)。

如果ac≡bc(mod m),且c和m互質,則a≡b(mod m) (就是說同余式兩邊可以同時除以一個和模數互質的數)。

————————————————

版權聲明:本文為CSDN博主「chensilly8888」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396265.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396265.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396265.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

歸結原則_被聘為自由職業者歸結為一件事:信任。

歸結原則by I quit Medium我退出Medium 被聘為自由職業者歸結為一件事&#xff1a;信任。 (Getting hired as a freelancer comes down to one thing: trust.) When I ask freelancers what they think is the most important factor in landing a client project, they usual…

關于JS的傳遞方式的小理解

var test function() {//將其看成是創建了一個對象alert(1);}var otherTest test;//賦值導致test和otherTest指向同一個對象otherTest();test.sd 9;//對對象進行操作&#xff0c;兩者都發生改變alert(otherTest.sd);//9var test function() {//test重新創建了一個對象&…

java p代表哪種數據類型_java數據類型(八種基本數據類型+三種引用類型)

1、整型類型 占用字節 取值范圍byte 1 -128~127 (7次方)short 2 -32 768~32 767 (15次方)int …

python中的隨機函數

python--隨機函數&#xff08;random,uniform,randint,randrange,shuffle,sample&#xff09; 本文轉載自:[chamie] random() random()方法&#xff1a;返回隨機生成的一個實數&#xff0c;它在[0,1)范圍內 運用random()方法的語法&#xff1a; import random #random()方法不…

Setuptool+pip安裝

https://pypi.python.org/pypi/setuptools 1. 下載ez_setup.py文件&#xff0c;cmd進入安裝目錄&#xff1b; 2. python setup.py install https://pip.pypa.io/en/latest/index.html 1、cmd進入ez_setup.py文件目錄2、用setuptools安裝&#xff1a;easy_install pip轉載于:htt…

rss 閱讀源_如何使用RSS更有效地閱讀

rss 閱讀源by Naman Kamra通過納曼卡姆拉(Naman Kamra) 如何使用RSS更有效地閱讀 (How to read more efficiently with RSS) Rich Site Summary (RSS) was developed way back in 1999 as a way to quickly subscribe to blogs and newspapers, back before tools like Twitte…

python 遍歷usb設備_python程序員教你寫腳本玩微信跳一跳,只要有耐心,你就是王者!...

溫馨提示&#xff1a;微信已經開始檢測分數異常高的情況了&#xff0c;請大家不要跑太高哦游戲模式這是一個 2.5D 插畫風格的益智游戲&#xff0c;玩家可以通過按壓屏幕時間的長短來控制這個「小人」跳躍的距離。可能剛開始上手的時候&#xff0c;因為時間距離之間的關系把握不…

一個電腦同時運行 64bit 和 32bit 的eclipse 如何匹配 jdk環境

一個電腦同時運行 64bit 和 32bit 的 eclipse 如何匹配 jdk環境 1 eclipse 分 64bit 和 32bit 兩種. 64bit的eclipse 只能搭配 64bit的 jdk 使用. 32bit的eclipse 只能搭配 32bit的 jdk 使用. 2 電腦上安裝好 32bit 和 64bit 的 jdk ,分別安裝在不同的路徑中. 比如我的3…

基本數據類型(dict)

目錄: 1.字典的簡單介紹 2.字典增刪改查和其他操作 3.字典的嵌套 一.字典的簡單介紹 字典(dict)是python中唯一的一個映射類型,他是以{}括起來的鍵值對組成,在dict中key是唯一的,在保存的時候,根據key類計算出一個地址然后將key-value保存在這個地址中這種算法被稱作hash算法,所…

自學成才翁_僅因為您是自學成才,并不意味著您必須獨自學習。

自學成才翁by Piotr Bakker皮特巴克(Piotr Bakker) 僅因為您是自學成才&#xff0c;并不意味著您必須獨自學習。 (Just because you’re self-taught doesn’t mean you have to learn alone.) I am a self-taught designer with no formal training. No art school, no priva…

java 近似值 循環次數,java題求解

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓public class PAI{public static void main(String[] args){int n 700;//Hello World! pai 3.1401640828900845(n 700)System.out.println("Hello World! pai " getPAI(n));//Hello World! pai 3.1430191863875865…

jq匹配偶數行_jquery怎么實現奇偶行不同背景顏色?

做表格的時候&#xff0c;經常要讓奇偶行顯示不同背景色&#xff0c;一來使表格顯得更美觀&#xff0c;二來使同行數據查找更快捷方便。通常我們是怎么實現的呢&#xff1f;就是在每個tr標簽上加css樣式。代碼如下所示&#xff1a;.odd {background-color:yellow;}.even {backg…

2016/4/19 ①單個文件上傳 ②上傳圖片后 預覽圖片

1&#xff0c;f1.php <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body> <!-- 作業:在網上找上傳圖片預覽的代碼 上傳服務器 再預覽--> <fo…

Android項目里集成Cordova詳解

2019獨角獸企業重金招聘Python工程師標準>>> 一 安裝nodejs二 cmd創建Android項目三 導入工程 運行一下四 調用插件五 Android studio環境下將CordovaLib作為依賴導入六 自定義插件七 java類中的一些問題八 在CordovaActivity中添加原生View組件 九 在Fragment里使用…

facebook移動端框架_2016年所有頂級移動應用均歸Google或Facebook所有

facebook移動端框架Today Nielsen released their report about the most widely used mobile apps in 2016. The top 8 apps were all owned by just two corporations: Google and Facebook.今天&#xff0c;尼爾森發布了有關2016年使用最廣泛的移動應用程序的報告。排名前8的…

php 判斷瀏覽器是ie,js判斷是否是ie瀏覽器

怎么去看瀏覽器的內核等信息 ---- js的全局對象window子屬性navigator.userAgent&#xff0c;這個屬性是包含了瀏覽器信息的相關信息&#xff0c;包括我們需要的瀏覽器內核navigator.userAgent這個值取出來是個字符串&#xff0c;可以通過string的 indexOf方法或者正則匹配來驗…

【JAVA基礎】一:聊聊筆試常見到的 “==、equal” 比較是否相等的內在差別

開始本文之前&#xff0c;先讓我們記住一個口訣&#xff08;這個口訣只針對基礎的類比如String、Integer等&#xff0c;如果是自定義的類&#xff0c;需要看equal的具體實現&#xff09;&#xff1a;equal比較其值&#xff0c; 比較地址 這兩天在走查代碼的時候發現一個童鞋&am…

postgres 退出_postgresql – 如何修復Postgres以便在突然關閉后啟動它?

由于突然斷電,在我的本地機器上運行的PostGres服務器突然關閉.重新啟動后,我嘗試重新啟動postgres,我收到此錯誤&#xff1a;$pg_ctl -D /usr/local / pgsql / data restartpg_ctl: PID file "/usr/local/pgsql/data/postmaster.pid" does not existIs server runnin…

php生成appid,PHP生成騰訊云COS簽名

目標使用 PHP 創建 COS 接口所需要的請求簽名步驟按照官方示例(也許是我笨&#xff0c;我怎么讀都覺得官方文檔結構費勁&#xff0c;示例細節互相不挨著&#xff0c;容易引起歧義)&#xff0c;請求簽名應用在需要身份校驗的場景&#xff0c;即非公有讀權限時。否則在請求API接口…