【发布时间】:2012-10-21 15:57:24
【问题描述】:
我有一个指向字节缓冲区的指针,我从中将每个偶数索引字节复制到一个 int(由于数据存储到缓冲区的协议,我知道奇数周期用于读取)。 现在当我这样做时
signed int a;
...
//inside a loop
a = buffer[2*i]; //buffer is unsigned
它给了我一个无符号数。但是当我这样做时
a = (int8_t)buffer[2*i]
号码以签名形式显示。这迫使我重新思考 c 中的符号扩展是如何工作的,尤其是在上述情况下。 我的理解是,因为我声明了一个已签名的,编译器会自动进行符号扩展。任何人都可以花一些时间来解释为什么不是这样。我只是在这个陷阱里呆了一个小时,不想以后再落入同样的陷阱。
【问题讨论】:
-
我知道符号扩展在 C 中是如何工作的,但是如果您有一个无符号数(但“符号位”为 1)并且您通过转换为更长的整数来进行符号扩展,那是怎么回事处理?抱歉,如果问题不清楚。