2010-04-15 4 views
1

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

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

Спасибо!

ответ

5

чем разница между «\ х» в начале полукокса к 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; 
} 

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

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

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

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

+0

Внедрение 'char' в' int' является наиболее определенно * не * неопределенным поведением - оно полностью определено. Результат такого выражения имеет то же значение, что и 'char', и тип' int'. – caf

+0

@caf: Спасибо за разъяснение. Отредактировал мой ответ. – sleske

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