我有一个uint8_t类型的数组,存储0和1。当我对每个元素进行求反时,我得到了-1和-2的数组。这怎么可能?我如何使其按预期方式执行?

最佳答案

它实际上是在做正确的事情,但显示不正确。负数用二进制补码表示。要将数字转换为负数,请执行:NOT(positive) + 1

例如,要将2转换为负数:


+2 = 00000010
not(+2) = 11111101
not(+2) + 1 = 11111110


这意味着-211111110表示为二进制。请注意,这实际上是+1的位倒数,即00000001。这就解释了为什么您看到自己是什么,但为什么不向您显示预期的积极呢?这取决于您如何显示它。您很可能将printf或类似的字符串格式化程序与%i而不是%u一起使用,因此编译器会自动为您强制转换。如果更改格式,则应固定格式。

如果只想在truefalse之间切换,请使用!而不是~

07-27 20:24