IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Замена цифр в 16-чном представлении, Си
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Нужно заменить в 16-ричном представлении числа 5-ку на f.
объясните пожалуйста, в чём у меня ошибка здесь?

#include <stdio.h>
#include <stdlib.h>
int main() {
char str[60];
unsigned x,mask,mask1;
printf ("Vvedite cheloe neotrichatel'noe 4islo\n");
scanf("%d", &x);
printf("V 16-oi sisteme: %x\n\n",x);
itoa(x, str, 2);
printf("vvedennoe chislo v 2-i sisteme schislenia: %s\n", str);
mask = 0x5;
mask1= 0xf;


while (mask>0)
{
if ((mask&x) == mask)
x=x|mask1;

mask<<=4;

}

printf("\nPreobrazovannoe chislo v 16-i sisteme chislenia: %x\n",x);
return 0;

}



Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






А вот тут происходит то, о чем я писал тебе раньше... Смотри, допустим, есть число: 0x2575

Первое сравнение отработает прекрасно: последняя цифра числа = 0x5, маска тоже 0x5, никаких проблем, последняя цифра меняется на 0xf...

Дальше - проблема: маска mask = 0x50 после сдвига, вторая цифра (вместе с первой) = 0x70, делаем AND - что будет?

01010000
and
01110000
=
01010000
, т.е. произведение равно маске, ХОТЯ цифра-то другая...

Чтобы отработало правильно, здесь применяется другой способ:
  while (mask>0) {

if((~(x&mask1)^(~mask)) == 0)
x = x | mask1;

mask <<= 4;
mask1 <<= 4; // Ну, и не забывать сдвигать эту маску тоже...

}
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.12.2020 20:05
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name