Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.140.242.165] |
|
Сообщ.
#1
,
|
|
|
Вывожу:
short x=-341; printf("%04X",x); FFFFFEAB FEAB П.С. в 64-битном компилю в вижуалке 2019. |
Сообщ.
#2
,
|
|
|
#include <iostream> #include <iomanip> int main() { short x=-341; std::cout << std::setw(4) << std::uppercase << std::hex << x << std::endl; return 0; } |
Сообщ.
#3
,
|
|
|
Всё хитрее решилось:
short x=-341; printf("%04X",*(unsigned short*)&x); |
Сообщ.
#4
,
|
|
|
Цитата Славян @ Всё хитрее short x=-341; printf("%04X",(unsigned short)x); |
Сообщ.
#5
,
|
|
|
Цитата Славян @ Это строго по "ГОСТ"у. Эллипсис подразумевает integral promotion аргументов, поэтому short кастуется к int. Естественно, что ты видишь знаковое расширение. Если тебя интересуют только четыре символа, либо сделай каст к беззнаковому, чтобы расширение было нулём, либо используй модификатор типа h. Но почему алгоритм нарушал заданое ГОСТом ограничение в 4 символа? |
Сообщ.
#6
,
|
|
|
Копец, хитрый Джо!
Добавлено Цитата Qraizer А поподробнее можно? Я к тому, что явно же задан МАКСИМУМ в 4 символа, а пишет 8. Как так? Это строго по "ГОСТ"у. |
Сообщ.
#7
,
|
|
|
Потому что длина указывает минимальную ширину, а не точную. Если хочешь описание в Стандарте, укажи какой язык и ревизию хочешь. А так, ищи по ключевым словам "integer promotions", "integral promotions" и "ellipsis".
|
Сообщ.
#8
,
|
|
|
Цитата Qraizer Блин, действительно! Был уверен, что это максимум. Виноват. Потому что длина указывает минимальную ширину |
Сообщ.
#9
,
|
|
|
Цитата Славян @ Всё хитрее решилось: short x=-341; printf("%04X",*(unsigned short*)&x); еще вариант есть short x=-341; char str[50]; sprintf(str, "%04X ", x); puts(str+4); |
Сообщ.
#10
,
|
|
|
Цитата sergioK Это отстойный вариант, ибо если x неотрицательное, то на экран ваш метод токмо пробел и выдаст. еще вариант есть |