取模运算性质_求余、取模运算在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.mzph.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接口…