char x=✀尀xe0✀; printf(✀✀%d✀✀,x); 为什么结果是-32??

2026年09月24日 07:34
有2个网友回答
网友(1):

  char x = /xe0; //因为是/x开头的 所以是十六进制哦
  将/xe0 分解成二进制 十六进制位可以分成4个二进制位,即
e 0
1111 0000 B
  所以 /xe0 的 二进制数是 1110 0000
  因为计算机是以2进制补码的形式表示的,所以1110 0000要表示成补码的形式
  正数的补码与原码相同。
  负数的补码是对其原码逐位取反,但符号位除外;然后整个数加1。
  符号位如果为1,表示负,如果为0,表示负
  因为1110 0000的符号位为1,所以为负
  所以我们要用负数的补码哦
  首先我们对1110 0000 逐位取反,但符号位除外 的 1001 1111
  然后对1001 1111 + 1 得 1010 0000
  符号位为负,所以1010 0000的值就为负,然后后面的7位按权展开运算得32,
加上符号位就得 - 32

  PS:若有不明白的地方,可以追问

网友(2):

char x = '\xe0';
也就是赋值为0xe0,二进制表示为:11100000,以10进制打印出来就是-32