Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Long Long в MSVC 1.5 
:(
    Опции темы
x8m6
Дата 24.1.2012, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



borisbn, мне нужно непростое целочисленное деление как видишь. num нужно разложить на две uint32 части. Их поделить на divider, а потом опять собрать в int64. Как собирать и разбирать я уже знаю. А вот как поделить нет.
Т.е. у меня сомнения по поводу этого кода:
Код

unsigned long long div(unsigned long long num,unsigned int divider){
unsigned int hi,lo;
to32bit(num,lo,hi);
lo = lo/divider;
hi = hi/divider;
return to64bit(lo,hi);
}

Книги открывал, и не одну.   

Это сообщение отредактировал(а) x8m6 - 24.1.2012, 13:03
PM MAIL   Вверх
borisbn
Дата 24.1.2012, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(x8m6 @  24.1.2012,  12:57 Найти цитируемый пост)
Т.е. у меня сомнения по поводу этого кода:

не очень понял, зачем всё это нужно, но, судя по описанию, в коде всё правильно, за исключением
Цитата(x8m6 @  24.1.2012,  12:57 Найти цитируемый пост)
int hi,lo;

Д.б. unsigned int. Откажись от знаковых чисел, если тебе в принципе не нужны отрицательные


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


Бывалый
*


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

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



Все таки как - то по другому надо делить
http://liveworkspace.org/code/63b7e6059aa3...b38f413add3a62d
PM MAIL   Вверх
volatile
Дата 25.1.2012, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(x8m6 @  24.1.2012,  12:57 Найти цитируемый пост)
Т.е. у меня сомнения по поводу этого кода:
unsigned long long div(unsigned long long num,unsigned int divider){
unsigned int hi,lo;
to32bit(num,lo,hi);
lo = lo/divider;
hi = hi/divider;

Ну естественно так делить нельзя.
во 2 классе, кажется учат делить столбиком. Вот столбиком и нужно делить, а не каждую цифру.

Это тот случай, когда на асме сделать проще.
Код

unsigned long long div64 (unsigned long long num, unsigned int divider)
{
    int lo = (int)num;
    int hi = (int)(num >>32);

__asm{
    xor edx,edx
    mov eax, hi
    div divider
    push eax
    mov eax, lo
    div divider
    pop edx  
   } 
}

liveworkspace асма не понимает, (или я не знаю как там надо писать)
Проверил на студии выборочно, вроде работает


Если кто напишет на С/С++, тоже самое но короче, мое уважение, и плюс в репу!
(естественно без привлечения 64-разрядной арифметики)


Это сообщение отредактировал(а) volatile - 25.1.2012, 01:11
PM MAIL   Вверх
x8m6
Дата 25.1.2012, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



volatile, что то не робит. переменные lo и hi не изменяются вообще

PM MAIL   Вверх
volatile
Дата 25.1.2012, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



x8m6, а они и не должны меняться.
результат функции в edx:eax
это и есть возврат функции unsigned long long func();

PM MAIL   Вверх
volatile
Дата 25.1.2012, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну если вам нужен результат в lo, hi (чтоб убедиться что работает)
Допишите в самом конце:
  mov hi, edx
  mov lo, eax

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


 




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


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

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