我正在读这本书:CS-APPe2.C具有unsigned和signed int类型,并且在大多数体系结构中使用二进制补码算法来实现有符号值; 但在学习了一些汇编代码后,我发现很少有指令区分无符号和有符号.所以我的问题是:
编译器是否有责任区分已签名和未签名?如果是的话,它是如何做到的?
谁实现了二进制补码算法 - CPU或编译器?
添加更多信息:
在学习了一些更多的指令之后,实际上有一些指令区分了有符号和无符号,例如setg,seta等.此外,CF和OF分别适用于无符号和.但大多数整数算术指令对待无符号并且签名相同,例如
int s = a + b
Run Code Online (Sandbox Code Playgroud)
和
unsigned s = a + b
Run Code Online (Sandbox Code Playgroud)
生成相同的指令.
那么在执行时ADD s d,CPU是否应该对s&d进行未签名或签名?或者它是无关紧要的,因为两个结果的位模式是相同的,编译器的任务是将基础位模式结果转换为unsigned或signed?
PS我正在使用x86和gcc