Size: a a a

Ассемблер

2020 March 29

ВХ

Віталій Халак in Ассемблер
%04hx - эффекта никакого. ведёт себя как signed.
источник

ВХ

Віталій Халак in Ассемблер
楽園松本
Какой тип у d?
unsigned int
источник

楽園松本 in Ассемблер
А как unsigned int получает значение -1?
источник

ВХ

Віталій Халак in Ассемблер
printf %x всё, что выше 0x7fffffff считает за signed.
источник

楽園松本 in Ассемблер
楽園松本
А как unsigned int получает значение -1?
?
источник

A

Aleksandr in Ассемблер
Я немного не понял, надо чтобы было только четыре знака?
источник

ВХ

Віталій Халак in Ассемблер
楽園松本
?
unsigned int d=0x80000000;
источник

楽園松本 in Ассемблер
Віталій Халак
unsigned int d=0x80000000;
Но это не -1 :)
источник

ВХ

Віталій Халак in Ассемблер
даже так:
unsigned d=0x12345678;
printf("%04x",d);
выдаст 12345678, вместо ожидаемого 5678.
источник

楽園松本 in Ассемблер
Віталій Халак
даже так:
unsigned d=0x12345678;
printf("%04x",d);
выдаст 12345678, вместо ожидаемого 5678.
Давай рассуждать с точки зрения логики. Пусть у нас есть десятичное число 123456. И ты сделаешь "%4d". Какой вывод ты бы ожидал получить?
источник

ВХ

Віталій Халак in Ассемблер
3456
источник

楽園松本 in Ассемблер
Нет! Это же не строка, а число.
источник

楽園松本 in Ассемблер
Ты же не можешь отрезать часть числа
источник

ВХ

Віталій Халак in Ассемблер
printf("%04x",d&0xffff);
источник

楽園松本 in Ассемблер
Віталій Халак
printf("%04x",d&0xffff);
Я бы всё же выделял бы отдельно четыре знака числа h_low = h % 0x10000
источник

楽園松本 in Ассемблер
Поэтому мой ответ на такое странное поведение: оно не определено
источник

A

Aleksandr in Ассемблер
printf("%04x",(short)d);
источник

ВХ

Віталій Халак in Ассемблер
изза того приходиться делать:

if(n<1<<8)
 printf("%02X",glyph[row++]&0xff;
else
 printf("%04X",glyph[row++]&0xffff;

вместо:

printf(n<1<<8?"%02X":"%04X",glyph[row++]);
источник

ВХ

Віталій Халак in Ассемблер
Aleksandr
printf("%04x",(short)d);
также
источник

A

Aleksandr in Ассемблер
printf("%04hX", d);
источник