gpt4 book ai didi

c - C语言中如何以位存储值

转载 作者:行者123 更新时间:2023-11-30 21:37:33 25 4
gpt4 key购买 nike

我希望在分配的内存的每一位中存储 0 或 1。例如我有 char *block_of_memory = (char *)malloc(125000 * sizeof(char)) ,这里我有 125000 * 8 位 = 1000,000 位内存。我怎样才能访问每一位并给它一个值0或1。比如说,我想让第20位为1,第21位为0。

最佳答案

您需要计算该字节内的字节偏移量和位掩码。

  • 设置位:按位或与掩码
  • 清除位:按位与掩码的补码
  • 读取位:返回字节和掩码的按位与

代码:

void set_bit(char *buf, int bit, int val)
{
int byte = bit / 8;
char mask = 1 << (bit % 8);
if (val)
buf[byte] |= mask;
else
buf[byte] &= ~mask;
}

int get_bit(char *buf, int bit)
{
int byte = bit / 8;
char mask = 1 << (bit % 8);
return buf[byte] & mask ? 1 : 0;
}

示例:将位 17 设置为 1。字节偏移量为 17/8 = 2。位偏移量为17%8 = 1。位掩码是通过将位偏移量左移 1 生成的:结果为 00000010 二进制。与其按位或byte[2]:所有位保持相同,除了掩码位为 1 的情况。

关于c - C语言中如何以位存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com