1
1
一些处理器的编译器缺少扩展右移指令的符号,它们将所有右移操作都作为零填充处理。
C99标准将负左移更改为未定义的行为。基本原理中没有给出任何改变的理由,甚至也没有承认这一点。基本原理中没有提到这一点,这表明它并没有被视为一个突破性的变化,因为没有理由期望在C89下有效定义行为的任何实现不会继续以同样的方式定义行为,不管标准是否继续要求它。唯一有意义的意图是允许一个“补码”或“符号大小”实现(如果曾经为C99生成过任何补码)以比C89所要求的更有用的方式运行。
在实践中,我所知道的编译器中,目前唯一不遵守左移位的期望,其结果可以表示为不溢出的乘法,这些编译器被显式配置为在负左移位时发出嘎嘎声,纯粹是因为标准不再定义它们的行为。然而,如果一些“聪明”的人基于标准不再适用的事实来“优化”一个二补编译器,我就不会感到特别惊讶了 要求 这些平台的实现以它们一贯的合理和有用的方式运行。这种偏差有两种形式:
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |