加载中…
  
博文
标签:

逻辑运算符

it

分类: 汇编
and & 
规则: 1&1 = 1; 1&0 = 0; 0&1 = 0; 0&0 =0
运用:and al, 10111111B
将0位对应的数值置为0
将1位对应的数值保持不变

or |
规则:1|1 = 1; 1|0 = 1; 0|1 = 1; 0|0 = 0
运用:or al, 10111111B
将0位对用的数值保持不变
将1位对应的数值置为1

nor ^
规则:1^1 = 0; 1^0 = 1; 0^1 = 1; 0^0 = 0
运用:a^b^b == a;
小技巧:不用第三个变量交换变量内容
a = a^b; 
b = a^b;  //此时 b = a0; 
a = a^b;  //此时 a = (a0^b0)^a0 = b0;
标签:

结构体

内存

分类: C/C
转自:解析C语言结构体对齐(内存对齐问题)

    结构体对齐原因有很大部分是因为计算机扫描的内存单元个数,也就是数据总线的大小。

    原则1:数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。

    原则2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)

    原则3:收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。


    这三个原则具体怎样理解呢?我们看下面几个例子,通过实例来加深理解。

    

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有