Binary 有符号和无符号整数

Binary 有符号和无符号整数,binary,unsigned,signed,Binary,Unsigned,Signed,我在复习一些内容时遇到了一个问题,问10011001在有符号整数和无符号整数中是什么。我知道无符号整数是153,因为无符号整数中没有负数,但我说10011001的有符号整数是-153是正确的,还是我犯了错误?无符号数和有符号数之间的区别在于,其中一位用于表示正数或负数 在你的例子中,你有8位 如果我将is视为有符号的,那么我有7位要处理:2^7 000 0000=0 111 1111=127 001 1001=25,则最高有效位导致进行以下计算 (25-128)=-103 如果我使用全部8位

我在复习一些内容时遇到了一个问题,问10011001在有符号整数和无符号整数中是什么。我知道无符号整数是153,因为无符号整数中没有负数,但我说10011001的有符号整数是-153是正确的,还是我犯了错误?

无符号数和有符号数之间的区别在于,其中一位用于表示正数或负数

在你的例子中,你有8位

如果我将is视为有符号的,那么我有7位要处理:2^7

  • 000 0000=0
  • 111 1111=127
  • 001 1001=25,则最高有效位导致进行以下计算
  • (25-128)=-103
如果我使用全部8位,那么我将使用无符号位:2^8

  • 0000=0
  • 1111111=255
  • 1001001=153
下面是演示答案的代码:

char *endptr;
char binary[11] = "10011001";  // need an extra char for the termination

char x = (char)strtol(binary, &endptr, 2);
unsigned char y = (unsigned char)strtol(binary, &endptr, 2);

printf("%s to   signed char (1 byte): %i\n", binary, (short)x);
printf("%s to unsigned char (1 byte): %u\n", binary, y);
输出:


那么答案是-25?我的计算不正确。我已经更新了我的答案。