LINUX.ORG.RU

Приведение типа char к unsigned long long


0

0

Вот пример:

#include <stdio.h>
int main () {

char charC5 = '\xC5';
char char67 = '\x67';
char charDD = '\xDD';
char char5A = '\x5A';

printf("(unsigned long long) charC5 = %llx\n", (unsigned long long) charC5);
printf("(unsigned long long) char67 = %llx\n", (unsigned long long) char67);
printf("(unsigned long long) charDD = %llx\n", (unsigned long long) charDD);
printf("(unsigned long long) char5A = %llx\n", (unsigned long long) char5A);

return 0;
}


Вот результат его выполнения:

(unsigned long long) charC5 = ffffffffffffffc5
(unsigned long long) char67 = 67
(unsigned long long) charDD = ffffffffffffffdd
(unsigned long long) char5A = 5a

Почему если char-значение начинается не с hex-цифры, на выходе приведения типов ffffffffffffffxx-значение?


>Почему если char-значение начинается не с hex-цифры, на выходе
 приведения типов ffffffffffffffxx-значение?

Дело не в цифре или букве, начиная с 0х80 появляется 1 в старшем разряде
 что для знаковых чисел является признаком отрицательного числа, при 
расширении типа знакового числа копируется старший разряд.

koTuk
()

а ведь тяжело писать на языке программирования, который даже выучить лень, правда?

anonymous
()
Ответ на: комментарий от anonymous

>а ведь тяжело писать на языке программирования, который даже выучить лень, правда? чушь!

приведение типов в Си - вещь во многом неоднозначная и непредсказуемая

anonymous
()
Ответ на: комментарий от anonymous

Вполне предсказуемая, надо ЧИТАТЬ доки по языку, а не просматривать.

denisv
()
Ответ на: комментарий от anonymous

угу. непредсказуемая примерно так же, как сторона, в которую открывается дверь. если не дать себе труда посмотреть, можно и по лбу получить. собственно, я бы сказал, что НУЖНО.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.