Поиск:

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


Бывалый
*


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

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



Компилю код компилятором Microsoft Visual C++ 1.5. В коде объявлена константа типа long long:
Код

#define BIGINTVALUE     77356848298LL

При компиляции через NMAKE появляется ошибка:
Код

 error C2059: syntax error : 'bad suffix on number'
 error C2177: constant too big
 error C2146: syntax error : missing ')' before identifier 'L'
1>NMAKE : fatal error U1077: 'C:\MSVC15\bin\cl.exe' : return code '0x2'

PM MAIL   Вверх
Daevaorn
Дата 22.1.2012, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



В чем вопрос?
PM MAIL WWW   Вверх
x8m6
Дата 22.1.2012, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

В чем вопрос? 

Как решить проблему или как в VC++ 1.5 задать такую константу? 
PM MAIL   Вверх
borisbn
Дата 22.1.2012, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Есть подозрение, что в 1983-м году студия была 16-битной и в ней просто не было возможности задавать 64-х битные числа.
Выбери студию поновее. У них есть и бесплатная версия


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


Бывалый
*


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

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



borisbn, ты думаешь что я настолько отстал от жизни что пишу на студии 1983 года? Нет. Просто нужно скомпилить одну часть проекта этим компилятором. 
PM MAIL   Вверх
volatile
Дата 23.1.2012, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



x8m6, попробуйте написать так
Код

 #define BIGINTVALUE     77356848298i64

Если не прокатит, то значит там действительно еще нет поддержки 64-разрядных чисел.
Остается в этом случае писать свою библиотеку 64-разрядной арифметики  smile 
Вообще-то это не не так и сложно.. Только зачем?
Ради спортивного итереса?

PM MAIL   Вверх
Dem_max
Дата 23.1.2012, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я думаю не поможет


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
x8m6
Дата 23.1.2012, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



volatile, не помогло.
Хорошо, тогда немного другой вопрос. Как записать 64 битное число двумя 32 битными (low and high части)? Если поможете кодом буду только рад. 

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


Эксперт
****


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

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



Цитата(x8m6 @  23.1.2012,  14:00 Найти цитируемый пост)
Как записать 64 битное число двумя 32 битными (low and high части)?

Код

#define BIGINTVALUE_LOW 0x42000102
#define BIGINTVALUE_HI  0xBAADFACE
#define BIGINTVALUE ( ( ((unsigned long long)BIGINTVALUE_HI) << 32 ) | BIGINTVALUE_LOW )


Это сообщение отредактировал(а) borisbn - 23.1.2012, 14:42


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


Бывалый
*


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

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



Я наверно не правильно вопрос поставил. Как вычислить 32-битные low и high части от 64-битного числа. Т.е. нужна функция:
Код

void to32bit(long long l,int& lo, int& hi){
  // insert code here
}

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


Эксперт
****


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

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



Цитата(x8m6 @  23.1.2012,  20:13 Найти цитируемый пост)
Как вычислить 32-битные low и high части от 64-битного числа. Т.е. нужна функция:
void to32bit(long long l,int& lo, int& hi){
  // insert code here
}

Как-то так:
Код

void to32bit(long long l,int& lo, int& hi){
   lo = (int)l;
   hi = (int)(l >>32);
}



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


Бывалый
*


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

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



Вот на этом примере почему то не работает:
Код

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h> 


void to32bit(unsigned long long l,int& lo, int& hi){
   lo = (int)l;
   hi = (int)(l >>32);
}

unsigned long long to64bit(int lo, int hi){
    return ((((unsigned long long)hi) << 32 ) | lo );
}

int _tmain(int argc, _TCHAR* argv[])
{

  unsigned long long big = 11386655755LL;
  int lo,hi;
  to32bit(big,lo,hi);
  unsigned long long l = to64bit(lo,hi);

  std::cout<<"lo="<<lo<<std::endl;
  std::cout<<"hi="<<hi<<std::endl;
  std::cout<<"l="<<l<<std::endl;
   
  getch();
  return 0;
}
}


Если вместо 11386655755 поставить 77356848298 то все нормально вычисляется. В чем дело?
PM MAIL   Вверх
borisbn
Дата 24.1.2012, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



замени везде int на unsigned int и всё будет ОК.
http://liveworkspace.org/code/060f4e9f7f42...8dd562dc55a5885
Дело в том, что при сдвиге знакового числа заполнение "слева" идёт не нулями, а знаковым битом.
Грубо говоря, в int не 32 значащих бита, а 31 и один - для определения знака числа.
Ты же пытаешься записать в int все 32 бита, и у тебя получается, что 31 записываются как значащие, а один (изначально тоже значащий) - как знак.

Это сообщение отредактировал(а) borisbn - 24.1.2012, 10:52


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


Бывалый
*


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

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



Еще очень нужна функция целочисленного деления:
Код

unsigned long long div(unsigned long long num,unsigned int divider)

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


Эксперт
****


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

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



Цитата(x8m6 @  24.1.2012,  11:44 Найти цитируемый пост)
Еще очень нужна функция целочисленного деления:

res = num / divider; // res - целая часть от деления num на divider при условии, что и num и divider - целые
res = num % divider; // res - остаток от деления num на divider

x8m6, скажи честно, ты хоть одну книгу открыл по Си++ ?


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


 




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


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

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