#define _INTSIZEOF(n)   ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) 

_INTSIZEOF(n) 整个做的事情就是将 n 的长度化为 int 长度的整数倍。

1.~是位取反的意思。 ~(sizeof(int) - 1) )就应该为~(4-1)=~(00000011b)=11111100b,这样任何数& ~(sizeof(int) - 1) )后最后两位肯定为0,就肯定是4的整数倍了。

2.(sizeof(n) + sizeof(int) - 1)就是将大于4m但小于等于4(m+1)的数提高到大于等于4(m+1)但小于4(m+2),这样再& ~(sizeof(int) - 1) )后就正好将原长度补齐到4的倍数了。

  sizeof(n) 对应图2中 X 所处位置

  (sizeof(n) + sizeof(int) - 1)对应图4中 x+n-1所处的位置

再& ~(sizeof(int) - 1) )后就正好将原长度补齐到4的倍数了即nq的位置

理论基础

对于两个正整数 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.

如图1所示:

当把 x 表示为:x = nq + r', 其中 -n < r' <=0    //最大非正剩余

nq 是我们所求。如图2所示:

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

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

如图3所示:

x+n-1 = qn + (n+r'-1), 其中 0<= n+r'-1 <n //最小非负剩余 所以 qn = [(x+n-1)/n]n. 用 c 语言计算就是:((x+n-1)/n)*n

如图4所示

图解 _INTSIZEOF(n)相关推荐

  1. CentOS 8 安装图解

    继 RHEL 8 发布之后,CentOS 社区也发布了让人期待已久的 CentOS 8,并发布了两种模式: CentOS stream:滚动发布的 Linux 发行版,适用于需要频繁更新的开发者 Ce ...

  2. 图解DotNet框架系列

    图解.Net框架系列(索引贴) (声明:本系列已完成,故索引帖重发) 众所周知,DotNet框架是非常庞大的,光项目创建时的种类就有WPF,WCF,WF这三种最新的技术,还有以前的Web,WinFor ...

  3. 二叉树线索化示意图_103-线索化二叉树思路图解

    2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...

  4. centos 下安装mysql,linux(Centos7)下安装mysql8.0.18的教程图解

    1 获取安装资源包 mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar 提取码: rsif 2 在/usr/local目录下新建目录mysql8 3 将下载的资源包(my ...

  5. 女士细线毛衣起多少针_潇洒帅气的男童V领开襟毛衣编织,带教程图解

    终于又完工一件. 用线:宝宝毛9号8团多用针:ADD2.75,3.0成衣尺寸:衣长43cm,胸围72cm,袖长42cm,肩宽32cm编织过程:1,用另线起针法起222针,织双螺纹5cm,排花,织20c ...

  6. bartender一行打印两个二次开发_C++ 智能指针和二叉树:图解层序遍历和逐层打印二叉树...

    作者:apocelipes  链接:https://www.cnblogs.com/apocelipes/p/10758692.html 二叉树是极为常见的数据结构,关于如何遍历其中元素的文章更是数不 ...

  7. Android环境变量的设置(详细图解版)

    Android环境变量的设置(详细图解版) 转载于:https://www.cnblogs.com/zhujiabin/p/4875182.html

  8. 选项选择Windows XP系统安装MySQL5.5.28图解

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ Windows XP系统安装MySQL5.5.28图解 MySQL数据库的安装一共分为两个部分:数据库的安装和数据库的配置. ...

  9. java备忘录模式应用场景_图解Java设计模式之备忘录模式

    图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...

最新文章

  1. php百度搜索框代码,基于jquery的仿百度搜索框效果代码_jquery
  2. matches()方法
  3. 【Python】利用pip下载Django超时失败的解决方法
  4. 浅析GDAL库C#版本支持中文路径问题(续)
  5. calc(~,mac电脑set-cookies要域名和请求域名相同
  6. 忘了 忘了,以前学的矩阵知识全交给老师了,敲黑板了,矩阵乘法实例讲解
  7. lesson 040 —— 面向对象简介
  8. 串口转WiFi透传模块UART转WiFi模块嵌入式WiFi参数一键配置原理
  9. 密码破解全能工具:Hashcat密码破解攻略
  10. 信息化和信息系统-PMP
  11. 科研笔记1:科研绘图
  12. C 语言中结构体中成员所占内存的大小
  13. 苹果手机咋用计算机,苹果手机怎么通过usb连接电脑上网
  14. Google 辟谣,Android 和 Chrome OS 不合并 - Andromeda
  15. 通过url给action传中文参数乱码解决方案
  16. 【web实战-业务逻辑】评论点赞逻辑
  17. Delphi Hook K3
  18. Centos7.2 Apache根据User-Agent设置访问禁止
  19. web一阶段 day14
  20. 佛祖保佑,永无bug——springboot启动图案的修改方法

热门文章

  1. 利用linux curl爬取网站数据
  2. 博客专题计划:《在实践中深入理解常见网络协议》
  3. 就像教育一样,本身作用巨大,当过度强化,就是扭曲了~
  4. DHCP服务器在企业里的各种应用方案
  5. Windows中命令提示符被禁用的解决方法
  6. LeetCode 201. 数字范围按位与
  7. B+树索引和哈希索引
  8. Elasticsearch性能监控(一)
  9. 我的第一款 Drone 插件
  10. pythonexcel最好得库_Python操作Excel,你觉得哪个库更好呢?