对十六进制和按位操作,总是糊涂,所以实际测试下:
我的理解,不一定全部正确:
32位的系统上,(都以32位系统为例)
一个int型是4个字节,所以0x3是 0x0003,四个字节,其中3代表一个字节(8个二进制位)00000011,0就是00000000了。
一个指针也是4个字节,这个程序里头打印 的很多都是指针类型的值:
比如 [5d2f70] ,是4个字节的十六进制数。
对0x03取反,得到的也是一个十六进制的数: [fffffffc]
malloc出来的地址,多次运行,最后一个字节,都是0,所以每次与,都还是0,buf与prealbuf一直都是相等的。
不太懂了 。。。。。
#include<stdio.h>
#include<stdlib.h>
typedef struct _RingBuffer{
unsigned int *prealbuf;
unsigned char *buf;
unsigned int size;
unsigned int capacity;
}RingBuffer;
void testAlign8(RingBuffer **prb,int capacity)
{
RingBuffer *rb;
rb=malloc(sizeof(RingBuffer));
if(rb==NULL)
{