硬汉嵌入式论坛

 找回密码
 立即注册
查看: 980|回复: 5
收起左侧

分享几个利用位运算实现的绝对值宏

[复制链接]

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2022-3-11 23:02:56 | 显示全部楼层 |阅读模式
#define ABS_INT64(x)        ((x) ^ ((x) >> 63)) - ((x) >> 63)
#define ABS_INT32(x)        ((x) ^ ((x) >> 31)) - ((x) >> 31)
#define ABS_INT16(x)        ((x) ^ ((x) >> 15)) - ((x) >> 15)
#define ABS_INT8(x)         ((x) ^ ((x) >>  7)) - ((x) >>  7)

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
发表于 2022-3-12 09:03:02 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
 楼主| 发表于 2022-3-12 11:41:04 | 显示全部楼层

硬汉客气了,也是项目中需要,查阅资料发现的,也不是自己设计的。
回复

使用道具 举报

210

主题

1043

回帖

1683

积分

至尊会员

More we do, more we can do.

积分
1683
发表于 2022-3-12 22:42:47 | 显示全部楼层
我感觉速度上快不到哪里去,毕竟绝对值基本没有算术运算
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
 楼主| 发表于 2022-3-13 02:30:07 | 显示全部楼层
emwin 发表于 2022-3-12 22:42
我感觉速度上快不到哪里去,毕竟绝对值基本没有算术运算

能快很多,没有判断和函数调用的开销,不过没有参数合法形检测所以不是很安全
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
 楼主| 发表于 2022-3-13 02:31:51 | 显示全部楼层
emwin 发表于 2022-3-12 22:42
我感觉速度上快不到哪里去,毕竟绝对值基本没有算术运算

通过汇编可以看到就2条指令完事
EOR      r0,r4,r4,ASR #31
SUB      r6,r0,r4,ASR #31
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 21:52 , Processed in 0.191255 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表