gpt4 book ai didi

c - 分解位模式、移位并创建新模式

转载 作者:行者123 更新时间:2023-11-30 15:31:22 25 4
gpt4 key购买 nike

作为更大问题的一部分,我必须采用一些二进制值:00000000 11011110 (8)

然后,我必须:

  1. 导出此函数中的位数 - 因此我通过找到最大 sig 数字的位置来完成此操作。
  2. 然后将该值的前 6 个数字存储到值 128 中,使其等于:10011110
  3. 然后将该值的最后 5 个数字存储到值 192 中,使其等于:11000011 10011110
  4. 这两个字节应该存储在某个数组中,buffer[]

我已经编写了这个函数,但是,位置似乎没有在 gdb 中正确初始化,并且值没有正确输出。这是我的尝试:

  void create_value(unsigned short init_val, unsigned char buffer[])
{
// get the count
int position = 0;
while (init_val >>= 1)
position++;

// get total
int count = position++;

int start = 128;

for (int i = 0; i < 7; i++)
if (((1 << i) & init_val) != 0) start = start | 1 << i;


buffer[0] = start;

start = 192;

for (int i = 7; i < 11; i++) {
if (((1 << i) & init_val) !=0) start = start | 1 << i;
}

buf[1] = start;
}

最佳答案

之后

while (init_val >>= 1)
position++;

init_val 将为 0。当您以后使用时

if (((1 << i) & init_val) != 0) start = start | 1 << i;

你永远不会改变开始

所以,在阅读完您尝试要做的事情(描述得很困惑)后,为什么不:

void create_value(unsigned short init_value, unsigned char buffer[])
{
buffer[0] = (init_value & 63) | 128;
buffer[1] = ((init_value >> 6) & 31) | 192;
return;
}

它的作用:init_value & 63 根据需要屏蔽 init_value 中除最低 6 位之外的所有位。 | 128 然后设置字节的最高有效位(请注意,IFF CHAR_BIT == 8)。
(init_value >> 6) 将 init_value 下移 6 位,因此现在原始位 6-11 变为位 0-4& 31 屏蔽该值中最低 5 位的所有位,| 192 设置两个最高有效位。

关于c - 分解位模式、移位并创建新模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24871096/

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