отрицательные целые в HEX
От: veronika  
Дата: 15.08.03 10:48
Оценка:
Народ, помогите!
Как преобразуются отрицательные целые в 16-ричную систему счисления!
Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!
Спасибо.

15.08.03 15:14: Перенесено модератором из 'C/C++' — ПК
15.08.03 21:05: Перенесено из 'Алгоритмы'
Re: отрицательные целые в HEX
От: sercher Украина  
Дата: 15.08.03 10:59
Оценка:
Можно так:

N = Not N + 1


Например -1 будет:
1) Not 1 = FE
2) FE + 1 = FF

-1 (10) = FF(16)
Re: отрицательные целые в HEX и обратно!!
От: veronika  
Дата: 15.08.03 11:02
Оценка:
Здравствуйте, veronika, Вы писали:

V>Народ, помогите!

V>Как преобразуются отрицательные целые в 16-ричную систему счисления!
V>Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!
V>Спасибо.

Как в HEX — я уже нашла, а вот как обратно из такого HEX получить правильное отрицательное число? При обратном преобразовании получается очень большое положительное .
Re[2]: отрицательные целые в HEX и обратно!!
От: sercher Украина  
Дата: 15.08.03 11:09
Оценка:
Тоже самое:

N = Not N + 1

Т.е. -5 = FB(16)
1) Not FB = 4
2) 4 + 1 = 5;

FB(16) = -5 (10)
Re: отрицательные целые в HEX
От: Кодт Россия  
Дата: 15.08.03 11:12
Оценка:
Здравствуйте, veronika, Вы писали:

V>Как преобразуются отрицательные целые в 16-ричную систему счисления!


Легко.
* диагностируем знак числа
* берем абсолютное значение
* приводим его к шестнадцатиричному виду.

Например:
char* signed_to_hex(char* buf, int x)
{
  char* org = buf;
  if(x < 0) { *(buf++) = '-'; x = -x; }
    _itoa(buf, x, 16);
    return org;
}


V>Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!


А что, вопрос вполне в тему.
... << RSDN@Home 1.1 beta 1 >>
Перекуём баги на фичи!
Re: [moderator] От модератора форума C/C++
От: Павел Кузнецов  
Дата: 15.08.03 11:14
Оценка:
Здравствуйте, veronika, Вы писали:

V>Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!


Не удаляю. Просто переношу туда, где он больше "на месте": в "Алгоритмы".
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: отрицательные целые в HEX и обратно!!
От: Кодт Россия  
Дата: 15.08.03 11:16
Оценка:
Здравствуйте, veronika, Вы писали:

VV>Как в HEX — я уже нашла, а вот как обратно из такого HEX получить правильное отрицательное число? При обратном преобразовании получается очень большое положительное .


Во-первых, дополнительный код нас спасает: (long)0xFFFFFFFF == (long)-1 == -0x00000001

Во-вторых, если у тебя строка вида [+/-]hhhhhhhh то распарсить ее легче легкого. Смотрим в сторону strtol().
long n = strtol("-FFFF", NULL, 16);
printf("n=%d\n");
// получаем n=-65536, что и требовалось
... << RSDN@Home 1.1 beta 1 >>
Перекуём баги на фичи!
Re[3]: отрицательные целые в HEX и обратно!!
От: veronika  
Дата: 15.08.03 11:18
Оценка:
Здравствуйте, sercher, Вы писали:


S> Тоже самое:


S> N = Not N + 1


S> Т.е. -5 = FB(16)

S> 1) Not FB = 4
S> 2) 4 + 1 = 5;

S> FB(16) = -5 (10)


Большое спасибо!!
Еще вопрос: если я не знаю заранее отрицательное или положительное HEX-число я получила, как мне определить, что получено отрицательное?
Re[3]: отрицательные целые в HEX и обратно!!
От: Кодт Россия  
Дата: 15.08.03 11:22
Оценка:
Здравствуйте, sercher, Вы писали:

S> Тоже самое:

S> N = Not N + 1

Это — способ найти (-N) в дополнительном коде.
При чем же здесь HEX?
Ведь те же самые слова относятся и к двоичной, и (о ужас) десятичной записи.
... << RSDN@Home 1.1 beta 1 >>
Перекуём баги на фичи!
Re: отрицательные целые в HEX
От: Анатолий Широков СССР  
Дата: 15.08.03 11:22
Оценка:
Здравствуйте, veronika, Вы писали:

V>Народ, помогите!

V>Как преобразуются отрицательные целые в 16-ричную систему счисления!
V>Модератору: Пожалуйста, не удаляйте мой вопрос хотя бы пару часов!
V>Спасибо.

По поводу представления:

Десятичная Двоичная     Шестнадцатиричная      Десятичная без знака 
со знаком
----------------------------------------------------------------------
-1         111111111     FF                            255
 +
 1         000000001     01                              1 
----------------------------------------------------------------------
 0         000000000     00                              0 (при 8 битовой арифметике)



Поэтому все очень просто:

1) MS specific:

#include <stdlib.h>
...
int i = -10;
char buffer[20];
const char* result = _itoa(i, buffer, 16);


2) STL

#include <strstream>
#include <iomanip>
...
int i = -10;
char buffer[20];
std::ostrstream stream(buffer);
stream << std::hex << i;

3) LIBС:

#include <stdio.h>

int i = -10;
char buffer[20];

sprintf(buffer, "%X", i);


Есть еще четвертый — самопальный. Поищите в "Исходниках". Удачи.
Re[4]: отрицательные целые в HEX и обратно!!
От: Кодт Россия  
Дата: 15.08.03 11:26
Оценка:
Здравствуйте, veronika, Вы писали:

V>Еще вопрос: если я не знаю заранее отрицательное или положительное HEX-число я получила, как мне определить, что получено отрицательное?


Сравнить с нулем
А если двоичными средствами — то проверить старший бит.
Например,
long L;
shoft S;
char C;
.....

if(L & 0x80000000) cout << "L is negative" << endl;
if(S & 0x8000) cout << "S is negative" << endl;
if(C & 0x80) cout << "C is negative" << endl;
... << RSDN@Home 1.1 beta 1 >>
Перекуём баги на фичи!
Re[4]: отрицательные целые в HEX и обратно!!
От: Анатолий Широков СССР  
Дата: 15.08.03 11:29
Оценка:
V>Еще вопрос: если я не знаю заранее отрицательное или положительное HEX-число я получила, как мне определить, что получено отрицательное?

Не получиться определить, поскольку полученное hex число можно интерпретировать как целое со знаком, так и без него. Если вы полученное число будете приводить к long и int, то старший бит определит знак числа, а если к unsigned long или int — нет.
Re: отрицательные целые в HEX
От: Андрей Тарасевич Беларусь  
Дата: 15.08.03 17:30
Оценка:
Здравствуйте, veronika, Вы писали:

V>Как преобразуются отрицательные целые в 16-ричную систему счисления!


Не понимаю, в чем сложность. Берешь число по модулю, переводишь в 16-ричную систему счисления, затем приписываешь спереди знак '-'. Например '-16' дает '-10h'.
Best regards,
Андрей Тарасевич
Re[2]: отрицательные целые в HEX и обратно!!
От: Андрей Тарасевич Беларусь  
Дата: 15.08.03 17:31
Оценка:
Здравствуйте, veronika, Вы писали:

V>>Как преобразуются отрицательные целые в 16-ричную систему счисления!


V>Как в HEX — я уже нашла, а вот как обратно из такого HEX получить правильное отрицательное число? При обратном преобразовании получается очень большое положительное .


Вопрос бессмысленен, до тех пор пока не уточнено, что имеется виду под HEX.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.