Типы вопросов в ANSI C - PullRequest
       2

Типы вопросов в ANSI C

1 голос
/ 15 апреля 2010

У меня есть несколько вопросов о наборе в ANSI C: 1. в чем разница между "\ x" в начале символа и 0x в начале символа (или в любом другом случае по этому вопросу). AFAIK, они оба означают, что это шестнадцатеричное ... так в чем разница.

  1. при приведении char к (unsigned), а не (unsigned char) - что это значит? почему (без знака) '\ xFF'! = 0xFF?

Спасибо!

1 Ответ

5 голосов
/ 15 апреля 2010

в чем разница между "\ x" в начало символа до 0x в начало символа

Разница в том, что 0x12 используется для указания целого числа в шестнадцатеричном формате, в то время как "\ x" используется для строковых литералов . Пример:

#include <stdio.h>

int main(){
  int ten = 0xA;
  char* tenString = "1\x30";
  printf("ten as integer: %d\n", ten);
  printf("ten as string: %s\n", tenString);
  return 0;
}

Printf должен оба вывести «10» (попытайтесь понять, почему).

при приведении char к (unsigned), а не (без знака) - что это значит? почему (без знака) '\ xFF'! = 0xFF?

"unsigned" - это просто сокращение от "unsigned int". Таким образом, вы переводите с char на int. Это даст вам числовое представление символа в наборе символов, используемом вашей платформой. Обратите внимание, что значение, которое вы получаете для символа, зависит от платформы (обычно в зависимости от кодировки символов по умолчанию). Для символов ASCII вы (обычно) получите код ASCII, но все, что находится за его пределами, будет зависеть от платформы и конфигурации среды выполнения.

Понимание того, что делает приведение от одного типа к другому, очень сложно (и часто, хотя и не всегда, зависит от платформы), поэтому избегайте его, если можете. Иногда это необходимо, хотя. Смотрите, например потребность-некоторые-осветление-о-отливка-в-с

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...