2014-12-18 3 views
1

Я перехожу к некоторой ревизии, и я наткнулся на вопрос, который задал вопрос о том, что такое 10011001 в значении integer и unsigned. Я знаю, что целое число без знака равно 153, потому что нет никаких отрицаний в целых числах без знака, но могу ли я сказать, что целое число со знаком 10011001 равно -153 или я ошибаюсь?Подписанные и незаписанные целые числа

ответ

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

+0

поэтому ответ -25? – mdbuzz

+0

Мои расчеты неверны. Я обновил свой ответ. –

Смежные вопросы