写一个宏定义函数

tzp118 2015-08-25 10:58:44
多媒体应用中有时需要把“整数”扩展到临近的16的倍数的整数,例如:1)图像的高度1080(非16的整数)像素“扩展”为1088(16的倍数) 2)图像的高度288(非16的整数)像素“扩展”后还是288(16的倍数)。请写一个这样的宏
...全文
345 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tzp118 2015-08-25
  • 打赏
  • 举报
回复
引用 12 楼 adlay 的回复:
[quote=引用 10 楼 tzp118 的回复:] [quote=引用 7 楼 adlay 的回复:] [quote=引用 5 楼 tzp118 的回复:] [quote=引用 1 楼 adlay 的回复:] #define EXTERN16BYTE(x) ((x + 15) / 16 * 16)
可是我如果输入1089,按照您写的这个输出的是1104,可实际上需要输出的是1088[/quote] 你确定你要的是 1088? 不是补位到 16 的整数倍吗,怎么能减位呢?[/quote] 题目说的是扩展到 临近 的16的整数位啊 临近的[/quote] 是的啊,但是扩展的意思是增加,扩展到临近的就是增加最少的位 你 1089 变成 1088 是减少了,不是增加撒 在实际的图像中,图像一行有 1089 个 BYTE 的数据,你那样扩展成 1088 就丢掉了一个 BYTE 的数据了,是不会允许的 小学语文老师要哭了[/quote] 哦,我明白了,谢谢啊
www_adintr_com 2015-08-25
  • 打赏
  • 举报
回复
引用 10 楼 tzp118 的回复:
[quote=引用 7 楼 adlay 的回复:] [quote=引用 5 楼 tzp118 的回复:] [quote=引用 1 楼 adlay 的回复:] #define EXTERN16BYTE(x) ((x + 15) / 16 * 16)
可是我如果输入1089,按照您写的这个输出的是1104,可实际上需要输出的是1088[/quote] 你确定你要的是 1088? 不是补位到 16 的整数倍吗,怎么能减位呢?[/quote] 题目说的是扩展到 临近 的16的整数位啊 临近的[/quote] 是的啊,但是扩展的意思是增加,扩展到临近的就是增加最少的位 你 1089 变成 1088 是减少了,不是增加撒 在实际的图像中,图像一行有 1089 个 BYTE 的数据,你那样扩展成 1088 就丢掉了一个 BYTE 的数据了,是不会允许的 小学语文老师要哭了
「已注销」 2015-08-25
  • 打赏
  • 举报
回复
所谓的临近起码你也得说清楚怎么个概念,比如说差值最小:1089 到 1088 的差值最小,而不是 1104。如果只是按指定位宽对其的话,只能往大不能小。如果要实现 1089 和 1087 都输出 1088 的话,最好还是写个函数。
二班的码农 2015-08-25
  • 打赏
  • 举报
回复
#define EXTEND(value) ((value + 8) >> 4 << 4) 之前那个不符合你的要求,试试这个
www_adintr_com 2015-08-25
  • 打赏
  • 举报
回复
引用 7 楼 adlay 的回复:
[quote=引用 5 楼 tzp118 的回复:] [quote=引用 1 楼 adlay 的回复:] #define EXTERN16BYTE(x) ((x + 15) / 16 * 16)
可是我如果输入1089,按照您写的这个输出的是1104,可实际上需要输出的是1088[/quote] 你确定你要的是 1088? 不是补位到 16 的整数倍吗,怎么能减位呢?[/quote] 如果你不是要 “扩展到临近的16的倍数的整数” 只是想按四舍五入的方式找到临近的 16 的倍数的整数,那把 + 15 改成 + 8 吧
tzp118 2015-08-25
  • 打赏
  • 举报
回复
引用 7 楼 adlay 的回复:
[quote=引用 5 楼 tzp118 的回复:] [quote=引用 1 楼 adlay 的回复:] #define EXTERN16BYTE(x) ((x + 15) / 16 * 16)
可是我如果输入1089,按照您写的这个输出的是1104,可实际上需要输出的是1088[/quote] 你确定你要的是 1088? 不是补位到 16 的整数倍吗,怎么能减位呢?[/quote] 题目说的是扩展到 临近 的16的整数位啊 临近的
www_adintr_com 2015-08-25
  • 打赏
  • 举报
回复
引用 5 楼 tzp118 的回复:
[quote=引用 1 楼 adlay 的回复:] #define EXTERN16BYTE(x) ((x + 15) / 16 * 16)
可是我如果输入1089,按照您写的这个输出的是1104,可实际上需要输出的是1088[/quote] 你确定你要的是 1088? 不是补位到 16 的整数倍吗,怎么能减位呢?
二班的码农 2015-08-25
  • 打赏
  • 举报
回复
#define EXTEND(value) (value % 16 == 0 ? value : ((value >> 4) + 1) << 4)
tzp118 2015-08-25
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
#define EXTERN16BYTE(x) ((x + 15) / 16 * 16)
可是我如果输入1089,按照您写的这个输出的是1104,可实际上需要输出的是1088
mujiok2003 2015-08-25
  • 打赏
  • 举报
回复
(x + 15 ) & ~0xFu
www_adintr_com 2015-08-25
  • 打赏
  • 举报
回复
要效率高一点还可以改成 (x + 15) & 0xFFFFFFF0
mujiok2003 2015-08-25
  • 打赏
  • 举报
回复
(x + 15 ) & ~16U
www_adintr_com 2015-08-25
  • 打赏
  • 举报
回复
#define EXTERN16BYTE(x) ((x + 15) / 16 * 16)

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧