【发布时间】:2021-10-17 01:53:45
【问题描述】:
我遇到了这行代码:
memset(tmp, 0, (-len) & 0x7F);
其中len 是uint8_t 指针 变量。
在按位运算之前,“-”对len 做了什么?结果会怎样?
鉴于它是一个无符号整数,我认为以这种方式添加符号是没有意义的(如果在 C 中可能的话),更不用说它是一个指针了。
【问题讨论】:
-
请提供代码的完整上下文。也就是说,给minimal reproducible example
-
uint8_t类型不是指针类型。如果您的len实际上是一个uint8_t*指针,那么您的代码将无法编译。 -
@Santiago Marruffo len 不是指针。您不能将一元运算符 - 应用于指针。
-
您需要提供更多上下文并更正关于
len是任何类型的指针的错误,但是,对于无符号整数类型或二进制补码类型,-len & 0x7F计算为最小数量字节x使得len+x是128 的倍数。例如,对于len= 0、128 或256,-len & 0x7F为零。对于len= 1、129 或257,它是127。对于len= 2,它是126。对于len= 127,它是1。这个计算有时用于计算需要多少填充填写最多为数字的倍数的空格。 -
uint8_t *len = ...; memset(tmp, 0, (-len) & 0x7F);--> “错误:一元减号的类型参数错误”