gpt4 book ai didi

c - 屏蔽最高有效位

转载 作者:行者123 更新时间:2023-11-30 14:20:51 24 4
gpt4 key购买 nike

我编写这个函数是为了删除每个字节中的最高有效位。但这个功能似乎并没有按照我想要的方式工作。

输出文件大小始终为“0”,我不明白为什么没有将任何内容写入输出文件。有没有更好、更简单的方法来删除每个字节中的最高有效位?

最佳答案

关于移位运算符,C 标准第 6.5.7 节规定:

If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined.

首先,删除 nBuffer << 8; 。即使它定义良好,它也不会是赋值运算符。

正如人们所提到的,您最好使用 CHAR_BIT比8.我很确定,而不是0x7f你的意思是UCHAR_MAX >> 1你的意思不是 7,而是 CHAR_BIT - 1 .

这里我们只关注 nBuffer 和 bit_count。我将注释掉任何不使用其中任何一个的内容。

 bit_count += 7;

if (bit_count == 7*8)
{
*out_buf++ = nBuffer;
/*if((write(out_fd, bit_buf, sizeof(char))) == -1)
oops("Cannot write on the file", "");*/
nBuffer << 8;
bit_count -= 8;
}
nBuffer = 0;
bit_count = 0;

这段代码最后,nBuffer 的值是多少?那么 bit_count 呢?这会对你的第二个循环产生什么影响? while (bit_count > 0)

现在让我们关注注释掉的代码:

    if((write(out_fd, bit_buf, sizeof(char))) == -1)
oops("Cannot write on the file", "");

你在哪里给bit_buf赋值?使用未初始化的变量是未定义的行为。

关于c - 屏蔽最高有效位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15075557/

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