有符号和无符号整数

时间:2014-12-18 11:51:41

标签: binary unsigned signed

我正在进行一些修改,我遇到了一个问题,询问10011001有符号整数和无符号。我知道无符号整数是153,因为无符号整数没有负数,但我是否正确地说10011001的有符号整数是-153还是我犯了错误?

1 个答案:

答案 0 :(得分:1)

无符号和有符号数之间的差异是该位之一用于表示正数或负数。

所以在你的例子中你有8位。

如果我视为签名,那么我有7位可以使用:2 ^ 7

  • 000 0000 = 0
  • 111 1111 = 127
  • 001 1001 = 25然后最高位导致发生以下计算。
  • (25 - 128)= -103

如果我使用全部8位,则使用无符号位来处理:2 ^ 8

  • 0000 0000 = 0
  • 1111 1111 = 255
  • 1001 1001 = 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);

输出:

enter image description here