猿问

C语言中如何最节省地保存0,1的一个长队列?

现在暂时我用unsignedchar类型来替代bool,因为C语言没有bool嘛。
如果只是保存的话可以每八位变成一个char去储存,但问题是我需要快速访问那些位是0还是1
烙印99
浏览 638回答 2
2回答

人到中年有点甜

用与&预算检测.#include//检测定义成一个宏#defineIS_SET(ch,idx)((ch)&(0x01

智慧大石

要节省空间的话可以使用位操作来完成,位操作的效率其实挺高的,并没有你想象的那么低,像楼上的把位操作定义成宏直接用也会被做成函数效率高。下面是使用位操作实现的一个数组和测试,可以改造成一个队列:C#include//机器字长,一般C/C++规定int类型为机器字长//选择和机器字长一致的变量可以加快访问运算速度#defineCPU_SIZEsizeof(unsignedint)//一机器字长能够保存的比特数#defineCPU_SIZE_BIT(CPU_SIZE*8)//计算_bitlen需要都少个机器字长#defineLEN_OF_BITS(_bitlen)((_bitlen+CPU_SIZE_BIT-1)/CPU_SIZE_BIT)//定义_var为_bitlen比特变量//在C89上,定义需要放在函数开始位置#defineDEFINE_BITS(_var,_bitlen)unsignedint_var[LEN_OF_BITS(_bitlen)]//将_var的第_ix置1#defineBIT_SET(_var,_ix)(_var)[(_ix)/CPU_SIZE_BIT]|=(1
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答