【问题标题】:What function does the minus sign (-) operator have on a pointer variable in C? [closed]减号 (-) 运算符对 C 中的指针变量有什么功能? [关闭]
【发布时间】:2021-10-17 01:53:45
【问题描述】:

我遇到了这行代码:

    memset(tmp, 0, (-len) & 0x7F);

其中lenuint8_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); --> “错误:一元减号的类型参数错误”

标签: c operators


【解决方案1】:

len 不能是指向变量的指针,因为一元减号运算符不能接受指针作为操作数。代码无法编译。 考虑到function prototype of memset,这里的len 更可能是uint8_t 类型。 here 描述了对无符号类型应用一元减号运算符的行为。

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2016-06-30
    相关资源
    最近更新 更多