小编Mil*_*owe的帖子

不是按位运算符会破坏无符号整数?

我正在尝试让C将无符号整数转换为无符号整数。 如何在不将C解释为二进制补码的情况下反转无符号数字的位?

每当我有一个无符号整数并将其用作按位NOT运算符的操作数时,它将根据2的补数求值为负数。但是根据定义,我使用的是无符号整数,即不应该带有符号的数字

下面是我的沙盒代码。我目前正在使用GCC版本9.1.1。

#include <stdio.h>
#include <stdint.h>

int main(){
   uint8_t x = 1;//0000 0001
   printf("NOT(%d) == %d", x, ~x);//1111 1110
}

Run Code Online (Sandbox Code Playgroud)

我想要254(1111 1110)的输出,但是C将值解释为二进制补码,所以我得到-2。有没有办法让我将C 解释为二进制补码?

c types bit-manipulation unsigned-integer

2
推荐指数
1
解决办法
66
查看次数

标签 统计

bit-manipulation ×1

c ×1

types ×1

unsigned-integer ×1