Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сложение 1byte + 1byte, переполнение памяти 
V
    Опции темы
ferz721
Дата 4.3.2011, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.1.2011

Репутация: нет
Всего: нет



Код

   unsigned char i = 123, c = 231, temp = 0;

temp = i + c;

    printf("i %d\tc %d\ttemp %d", i, c, temp);


как сделать с помощью битовых операций чтобы  temp была правильной цифрой?
Код

    printf("i %d\tc %d\ttemp %d\n", i, c, 256 + temp);

правда без битовых операций

Это сообщение отредактировал(а) ferz721 - 4.3.2011, 14:30
PM MAIL   Вверх
borisbn
Дата 4.3.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(ferz721 @  4.3.2011,  14:06 Найти цитируемый пост)
как сделать с помощью битовых операций чтобы  temp была правильной цифрой?

что значит "правильной цифрой" ?
если хочешь, чтобы она была равна 123 + 231 = 354, то типа, выделенного для temp, а именно unsigned char, не хватит для хранения этого числа.
сделай так:
Код

   unsigned char i = 123, c = 231;
   unsigned int temp = 0;

   temp = (unsigned int)i + c;

   printf("i %d\tc %d\ttemp %d", i, c, temp);

и будет щазтье


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ferz721
Дата 4.3.2011, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.1.2011

Репутация: нет
Всего: нет



Цитата

что значит "правильной цифрой" ?

1+1 = 2,  2+2= 4 правильная решение, правильная цифра.
Код

 unsigned int temp = 0;

   temp = (unsigned int)i + c;

к int-y приводить нельзя, в том то и дело что правильная сума сложения должна выводиться на экран и должна быть больше байта но хранить в байте.
PM MAIL   Вверх
mes
Дата 4.3.2011, 17:47 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(ferz721 @  4.3.2011,  16:01 Найти цитируемый пост)
 и должна быть больше байта но хранить в байте. 

ну тогда, для примера, напишите двумя цифрами в десятичной системе число сто.. 



--------------------
PM MAIL WWW   Вверх
borisbn
Дата 4.3.2011, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(ferz721 @  4.3.2011,  14:06 Найти цитируемый пост)
printf("i %d\tc %d\ttemp %d\n", i, c, 256 + temp);

а в случае, когда i + c меньше, чем 256 как быть ?


единственное, что могу "предложить"
Код

printf( "i %d\tc %d\ti+c %d", i, c, i + c );
или
printf( "i %d\tc %d\ttemp %d\n", i, c, ( (i + c) >= 256 ? 256 + temp : temp ) );

а хранить в temp значение, болшее чем 255, у тебя нк никак не получится.

Это сообщение отредактировал(а) borisbn - 4.3.2011, 18:27


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ferz721
Дата 4.3.2011, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.1.2011

Репутация: нет
Всего: нет



Цитата

ну тогда, для примера, напишите двумя цифрами в десятичной системе число сто.. 

знал бы неспрашивал, думал может быть есть какое решение.
на самом деле задача выплыла из алгоритма обмена числами между двумя переменными.
Код

a = 3, b = 5;
b = b - a;
a = b + a;
b = a - b; 

в том случае если память будет переполнена
Код

printf( "i %d\tc %d\ttemp %d\n", i, c, ( (i + c) >= 256 ? 256 + temp : temp ) );

тоже такое решение только через if
PM MAIL   Вверх
Damarus
Дата 4.3.2011, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Цитата(ferz721 @  4.3.2011,  19:41 Найти цитируемый пост)
на самом деле задача выплыла из алгоритма обмена числами между двумя переменными.

С этого и надо начинать.
Код

a ^= (b ^= (a ^= b));

PM MAIL ICQ Jabber   Вверх
mes
Дата 4.3.2011, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(ferz721 @  4.3.2011,  18:41 Найти цитируемый пост)
 задача выплыла из алгоритма обмена

если c++ ( хотя, судя по коду, вряд ли) то смотрите std::swap


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0702 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.