#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
功能:
首先,sizeof(int)肯定是2的次方数,比如32位是4,64位是8
((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
的意思就是,如果sizeof(n)是sizeof(int)的倍数,则保持不变,否则返回最小的,大于sizeof(n)的,sizeof(int)的倍数。
比如,如果sizeof(int)是4,那么sizeof(n)是1-4的时候返回4,5-8的时候返回8,以此类推
实现:
首先sizeof(int)写成2进制是1后面若干个0,假设是n个0
sizeof(int) - 1 就是n个1,
取非再和前面的数取与就是清除掉前面那个数的后面n比特。
如果sizeof(n) 后面n比特都是0,那么加sizeof(int)-1不进位,相当于加上再清除掉。
如果sizeof(n) 后面n比特至少有1位是1,那么加了之后会往前进1,相当于sizeof(n) 右移n位,加1,再补充上n个0。
例子:
int - 4 : 0000 0100 //n=2
sizeof(int) - 1 : 0000 0011
~ : 1111 1100
如果sizeof(n) 后面n比特都是0 : xxxx xx00 + 0000 0011 = xxxx xx11 然后后两位清零 -> xxxx xx00 //4的倍数
如果sizeof(n) 后面n比特至少有1位是1 : xxxx xx01 + 0000 0011 == 00xx xxxx + 0000 0001 再补零
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )的更多相关文章
- sizeof(int *) 和 sizeof(int)型的大小问题
小问题,暂时记录注意一下 printf("sizeof(int): %d\n", (int)sizeof(int)); printf("sizeof(int ...
- C++ 对数组sizeof 和对数组元素sizeof
这一段程序 下面这段程序很有看点://arr1 is an array of intsint *source=arr1;size_t sz=sizeof(arr1)/sizeof(*arr1);//n ...
- what is difference in (int)a,(int&)a,&a,int(&a) ?
This interview question come from a famous communication firm of china. : ) #include <iostream> ...
- (转载)(int)a、&a、(int)&a、(int&)a的区别,很偏僻的题
#include <iostream>#include <stdio.h>#include <string.h>#include <conio.h>us ...
- (int)a、&a、(int)&a、(int&)a的区别,很偏僻的题
(int)a.&a.(int)&a.(int&)a的区别,很偏僻的题 #include <iostream> #include <stdio.h> #i ...
- 【C】二级指针探秘 & 星号的两种用法(1.与基本类型结合形成另一种类型,比如与int结合形成int* 2.取值操作)
1)问题:二级指针到底是什么?怎么用的?怎么存放的? #include <stdio.h> #define TEST_ADDR 0x12FF40 void main() { int a = ...
- int *p()与int (*p)()的区别
int *p()是返回指针的函数 int (*p)()是指向函数的指针 返回指针的函数: int *a(int x,int y); 有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号 ...
- Linux基本数据类型大小——int,char,long int,long long int
转自:http://paddy-w.iteye.com/blog/1403217 在Linux操作系统下使用GCC进行编程,目前一般的处理器为32位字宽,下面是/usr/include/limit.h ...
- int main() 与 int _tmain()
用过C的人都知道每一个C的程序都会有一个main(),但有时看别人写的程序发现主函数不是int main(),而是int _tmain(),而且头文件也不是<iostream.h>而是&l ...
随机推荐
- 下载android sdk更新包离线安装解决方案
本文转载自:http://xljboox.blog.163.com/blog/static/7628448320111159354738/ 第一次安装android sdk后进行开发包的更新,你应该了 ...
- mysql 数据库名含“-”
跨数据库操作时,用反引号即可: insert into `tmi-ds`.knn_test(imagedata) select imagedata from tmidb.imagetable wher ...
- Python 变量和常量及数据类型
一.变量的命名 变量由字母.数字和下划线组成.变量的第1个字符必须是字母或下划线. 二.变量的赋值 例: x = 1 三.局部变量 局部变量只能在函数或者代码段内使用. 四.全局变量 在函数之外定义的 ...
- 第八次作业(课堂实战)- 项目UML设计
本次作业博客 团队信息 队名:起床一起肝活队 原组长: 白晨曦(101) 原组员: 李麒 (123) 陈德斌(104) 何裕捷(214) 黄培鑫(217) 王焕仁(233) 林志华(128) 乐忠豪( ...
- lintcode-391-数飞机
391-数飞机 给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机? 注意事项 如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权. 样例 对于每架 ...
- NULL指针引起的一个linux内核漏洞
NULL指针一般都是应用于有效性检测的,其实这里面有一个约定俗成的规则,就是说无效指针并不一定是 NULL,只是为了简单起见,规则约定只要指针无效了就将之设置为NULL,结果就是NULL这个指针被用来 ...
- OSG学习:用多通道(multiple passes)实现透明度
osgFX库提供了一个用于多通道渲染(multi-pass rendering)的框架.每个你想要渲染的子图都应该被添加到osgFX::Effect节点,多通道技术的定义和使用都可以在这个节点中完成. ...
- 使用命令virsh管理网络设备,创建桥设备 和 使用virt-manager创建虚拟机
# 1:查看网卡接口 virsh iface-list Name State MAC Address ------------------------------------------------- ...
- springmvc值传递
1.页面向后台传值 A.HttpServletRequest方式: package com.rong.controller; import javax.annotation.Resource; imp ...
- PHP初级
通过form get post表单提交的数据,数据内容由用户填写或选择而得到!