高效的C编程之:布尔表达式(上)

来源:本站
导读:目前正在解读《高效的C编程之:布尔表达式(上)》的相关信息,《高效的C编程之:布尔表达式(上)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《高效的C编程之:布尔表达式(上)》的详细说明。
简介:本章将帮助读者在ARM处理器上编写高效的C代码。本章涉及的一些技术不仅适用于ARM处理器,也适用于其他RISC处理器。(EEFOCUS)

14.4布尔表达式14.4.1范围检测

通常,布尔表达式被用来检测某个数值是否在特定的范围内。例如,在图形窗口处理程序中,常使用布尔表达式判断屏幕中一个点是否在当前活动窗口范围内。

下面的程序使用结构体定义点坐标并计算坐标的当前位置。

boolPointInRect1(Pointp,Rectangle*r)

{return(p.x>=r->xmin&&p.x<r->xmax&&

p.y>=r->ymin&&p.y<r->ymax);

}

上面的功能函数,被编译为下面的指令序列。

PointInRect1

LDRa4,[a3,#0]

CMPa1,a4

BLT|L000034.J5.PointInRect1|

LDRa4,[a3,#4]

CMPa4,a1

BLE|L000034.J5.PointInRect1|

LDRa1,[a3,#8]

CMPa2,a1

BLT|L000034.J5.PointInRect1|

LDRa1,[a3,#&c]!

CMPa2,a1

MOVLTa1,#1

MOVLTpc,lr

|L000034.J5.PointInRect1|

MOVa1,#0

MOVpc,lr

但上面的代码并不是最精简的。编译器对(x>=min&&x<max)形式的布尔表达式的处理过程比较复杂。它将以(unsigned)(x-min)<(max-min)形式实现布尔操作。所有对于上面范围判断的代码,建议将函数写成如下形式。

boolPointInRect2(Pointp,Rectangle*r)

{return((unsigned)(p.x-r->xmin)<r->xmax&&

(unsigned)(p.y-r->ymin)<r->ymax);

}

这样编译出的汇编指令序列如下所示。

PointInRect2

LDRa4,[a3,#0]

SUBa1,a1,a4

LDRa4,[a3,#4]

CMPa1,a4

LDRCCa1,[a3,#8]

SUBCCa1,a2,a1

LDRCCa2,[a3,#&c]!

CMPCCa1,a2

MOVCSa1,#0

MOVCCa1,#1

MOVpc,lr

提醒:《高效的C编程之:布尔表达式(上)》最后刷新时间 2024-03-14 01:07:25,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《高效的C编程之:布尔表达式(上)》该内容的真实性请自行鉴别。