我有一个指向字节缓冲区的指针,我从中将每个偶数索引字节复制到一个 int(由于数据存储到缓冲区中的协议,我知道奇数周期用于读取)。现在当我这样做时
signed int a;
...
//inside a loop
a = buffer[2*i]; //buffer is unsigned
它给了我一个无符号数。但是,当我这样做时
a = (int8_t)buffer[2*i]
该号码以签名形式显示。这迫使我重新思考 c 中的符号扩展是如何工作的,尤其是在上述情况下。我的理解是,因为我声明了一个已签名的,编译器会自动进行符号扩展。任何人都可以花一些时间来解释为什么不是这样。我只是在这个陷阱里呆了一个小时,不想以后再落入同样的陷阱。