图解 _INTSIZEOF(n)
#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)相关推荐
- CentOS 8 安装图解
继 RHEL 8 发布之后,CentOS 社区也发布了让人期待已久的 CentOS 8,并发布了两种模式: CentOS stream:滚动发布的 Linux 发行版,适用于需要频繁更新的开发者 Ce ...
- 图解DotNet框架系列
图解.Net框架系列(索引贴) (声明:本系列已完成,故索引帖重发) 众所周知,DotNet框架是非常庞大的,光项目创建时的种类就有WPF,WCF,WF这三种最新的技术,还有以前的Web,WinFor ...
- 二叉树线索化示意图_103-线索化二叉树思路图解
2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...
- 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 ...
- 女士细线毛衣起多少针_潇洒帅气的男童V领开襟毛衣编织,带教程图解
终于又完工一件. 用线:宝宝毛9号8团多用针:ADD2.75,3.0成衣尺寸:衣长43cm,胸围72cm,袖长42cm,肩宽32cm编织过程:1,用另线起针法起222针,织双螺纹5cm,排花,织20c ...
- bartender一行打印两个二次开发_C++ 智能指针和二叉树:图解层序遍历和逐层打印二叉树...
作者:apocelipes 链接:https://www.cnblogs.com/apocelipes/p/10758692.html 二叉树是极为常见的数据结构,关于如何遍历其中元素的文章更是数不 ...
- Android环境变量的设置(详细图解版)
Android环境变量的设置(详细图解版) 转载于:https://www.cnblogs.com/zhujiabin/p/4875182.html
- 选项选择Windows XP系统安装MySQL5.5.28图解
本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ Windows XP系统安装MySQL5.5.28图解 MySQL数据库的安装一共分为两个部分:数据库的安装和数据库的配置. ...
- java备忘录模式应用场景_图解Java设计模式之备忘录模式
图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...
最新文章
- php百度搜索框代码,基于jquery的仿百度搜索框效果代码_jquery
- matches()方法
- 【Python】利用pip下载Django超时失败的解决方法
- 浅析GDAL库C#版本支持中文路径问题(续)
- calc(~,mac电脑set-cookies要域名和请求域名相同
- 忘了 忘了,以前学的矩阵知识全交给老师了,敲黑板了,矩阵乘法实例讲解
- lesson 040 —— 面向对象简介
- 串口转WiFi透传模块UART转WiFi模块嵌入式WiFi参数一键配置原理
- 密码破解全能工具:Hashcat密码破解攻略
- 信息化和信息系统-PMP
- 科研笔记1:科研绘图
- C 语言中结构体中成员所占内存的大小
- 苹果手机咋用计算机,苹果手机怎么通过usb连接电脑上网
- Google 辟谣,Android 和 Chrome OS 不合并 - Andromeda
- 通过url给action传中文参数乱码解决方案
- 【web实战-业务逻辑】评论点赞逻辑
- Delphi Hook K3
- Centos7.2 Apache根据User-Agent设置访问禁止
- web一阶段 day14
- 佛祖保佑,永无bug——springboot启动图案的修改方法