免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9816 | 回复: 9
打印 上一主题 下一主题

能不能对这句话的数学思想给解释下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-20 09:46 |只看该作者 |倒序浏览
#define _INTSIZEOF(n)  ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
说能够在某些系统中内存对齐.(估计是得到一个2 或者4的整数倍)
这个好象就是(x+3)&~3
这样就能满足对齐了吗?
请从数学上给说说.
谢谢

论坛徽章:
0
2 [报告]
发表于 2006-08-20 12:19 |只看该作者
对于两个正整数 x, n 总存在整数 q, r 使得

x = nq + r, 其中  0<= r <n                  //最小非负剩余

q, r 是唯一确定的。q = [x/n], r = x - n[x/n]. 这个是带余除法的一个简单形式。在 c 语言中, q, r 容易计算出来: q = x/n, r = x % n.


所谓把 x 按 n 对齐指的是:若 r=0, 取 qn, 若 r>0, 取 (q+1)n. 这也相当于把 x 表示为:

x = nq + r', 其中 -n < r' <=0                //最大非正剩余   

nq 是我们所求。关键是如何用 c 语言计算它。由于我们能处理标准的带余除法,所以可以把这个式子转换成一个标准的带余除法,然后加以处理:

x+n = qn + (n+r'),其中 0<n+r'<=n            //最大正剩余

x+n-1 = qn + (n+r'-1), 其中 0<= n+r'-1 <n    //最小非负剩余

所以 qn = [(x+n-1)/n]n. 用 c 语言计算就是:

((x+n-1)/n)*n

若 n 是 2 的方幂, 比如 2^m,则除为右移 m 位,乘为左移 m 位。所以把 x+n-1 的最低 m 个二进制位清 0就可以了。得到:

(x+n-1) & (~(n-1))

[ 本帖最后由 win_hate 于 2006-8-20 12:21 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-05-12 22:50 |只看该作者
对楼上佩服的五体头地.真TM厉害.

论坛徽章:
0
4 [报告]
发表于 2008-05-12 23:00 |只看该作者
楼上的id及发贴数也很厉害。

论坛徽章:
0
5 [报告]
发表于 2008-05-13 10:37 |只看该作者
看似,把 x+n-1 的最低 m 个二进制位清 0, 是为了去除 qn + (n+r'-1)的(n+r'-1)得到qn,跟左移右移关系不大?

论坛徽章:
0
6 [报告]
发表于 2011-02-23 20:31 |只看该作者
这个n 应该为偶数吧,就是int类型占用的字节数,根据不同字长的控制器而不同,但应该都是偶数吧,不然(x+n-1)&(~(n-1))是做不到乘以n在除以n的,不知道我说的对不对?呵呵,楼主很厉害~

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
7 [报告]
发表于 2011-02-24 08:56 |只看该作者
就分别把尾端字节为0123的全部考察下就可以知道对齐了没有

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
8 [报告]
发表于 2011-02-24 08:58 |只看该作者
2楼真是大仙啊。

论坛徽章:
0
9 [报告]
发表于 2012-03-10 16:32 |只看该作者
2楼得分析太强了,最近正看到相关的东西,百思不得其解,太感谢了。

论坛徽章:
0
10 [报告]
发表于 2012-03-11 13:06 |只看该作者
我觉得n不仅要是偶数,而且要是2的幂,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP