如何实现C中的Typecasts?

see*_*ker 2 c compiler-construction x86 arm isa

从应用程序员的角度来看,类型转换只是起作用.使用某种语法,整数的无符号表示可以充当小于INT_MAX的有符号整数值.执行这些转换的算法是什么?它们的时间复杂度是多少?是否存在执行转换的现代指令集体系结构的专用项,或者编译器是否知道一系列指令?如果类型转换在内部工作中存在平台依赖性,那么这些差异是否会泄漏到类型转换的影响中?

Lee*_*ker 6

C语言在"类型转换"的相同语法下混淆了两个不同的进程.第一种是简单地以两种不同的方式解释同一组位.这就是发生的情况,例如,当您将signed int转换为unsigned int时.实际上没有任何变化,您只需告诉编译器以不同的方式解释这些位.例如,表达式a < b可能会导致生成不同的代码a < (unsigned)b,即使转换本身实际上没有对其b自身的位做任何事情.

同样地,指向事物的指针可以转换为指向不同事物的指针,但它们仍然只是内存地址,并且除了编译器执行指针数学和解除引用等操作之外,强制转换实际上不会改变任何其他内容.

C错误地称为类型转换的另一个不相关的东西是类型转换.如果你有int a,表达式(double)a实际上会调用一个函数来将整数转换为等效的双精度浮点值.这需要相当多的数学.在整数类型之间转换通常会留下比特,但会增加额外的比特:例如,if short a = 0x1234,(long)a则将是0x00001234(填充比特是0还是1取决于有符号性).