我有一个uint8_t类型的数组,存储0和1。当我对每个元素进行求反时,我得到了-1和-2的数组。这怎么可能?我如何使其按预期方式执行?
最佳答案
它实际上是在做正确的事情,但显示不正确。负数用二进制补码表示。要将数字转换为负数,请执行:NOT(positive) + 1
。
例如,要将2转换为负数:+2 = 00000010
not(+2) = 11111101
not(+2) + 1 = 11111110
这意味着-2
由11111110
表示为二进制。请注意,这实际上是+1
的位倒数,即00000001
。这就解释了为什么您看到自己是什么,但为什么不向您显示预期的积极呢?这取决于您如何显示它。您很可能将printf
或类似的字符串格式化程序与%i
而不是%u
一起使用,因此编译器会自动为您强制转换。如果更改格式,则应固定格式。
如果只想在true
和false
之间切换,请使用!
而不是~
。