直到几天前,这个问题从未在我脑海中浮现。但是,上周有人问过question关于OpenCL C语言中矢量的比较运算符。这很容易回答,如果有人不能评论我的答案,那么一切都会停在那里:
如果条件为真且向量返回-1,则标量会返回1,这有点令人讨厌。
我的第一个想法是"只要0是假的就关心,所有其他值都是真的"。然后我认为返回-1更有意义,因为所有位都设置为:如果false为0000..000,那么1111 ... 111是真的是相当逻辑的,我虽然它甚至可能对某些按位操作有用。
更多关于这个主题的搜索,我发现有人建议在某些条件下设置所有位而不是LSB更快(这是用于C之外的另一种语言,不幸的是我无法找回这个交)。
但是,如果我刚才所说的是正确的,为什么在C中选择值1?我知道标准是这样说的......但为什么呢?
这是历史性的吗?是因为某些系统不使用两个补码表示吗?即便如此,这些系统返回-1会有问题吗?实际上,有什么理由吗?