PDA

View Full Version : تعریف یک متغیر بزرگ



Special
چهارشنبه 10 بهمن 1386, 10:58 صبح
با عرض سلام و خسته نباشید
من میخوام یه متغییر از نوع صحیح تعریف کنم که تا عدد 999 میلیارد در اون جا بشه
من اینطوری تعریف کردم ولی جواب نداد. unsigned long int x
چیکار باید بکنم؟

Nima_NF
چهارشنبه 10 بهمن 1386, 12:05 عصر
بستگی به کامپایلری دارد که از آن استفاده می کنید، انواع زیر تا 20 رقم یعنی 64 بیت هستند که از میلیارد میلیارد هم بیشتر می شود:




long long
unsigned long long

نوع مایکروسافتی آن:
__int64

PC2st
چهارشنبه 10 بهمن 1386, 15:40 عصر
نوع long double را امتحان کنید.

Special
چهارشنبه 10 بهمن 1386, 16:03 عصر
من با Microsoft Visual C++ 6.0 کار میکنم
long long رو اصلا قبول نمیکنه و میگه یه long اضافیه.
int64__رو هم که میزنم مثلا برای این برنامه :



#include<iostream.h>
#include<conio.h>
void main(){
__int64 n;
cout<<"enter number:";
cin>>n;
cout<<n;
getch ();
}


این دوتا error رو میده:
( error C2679: binary '>>' : no operator defined which takes a right-hand operand of type '__int64' (or there is no acceptable conversion


error C2593: 'operator <<' is ambiguous



long double هم ،برای اعداد اعشاریه. من عدد صحیح میخوام

Nima_NF
چهارشنبه 10 بهمن 1386, 19:42 عصر
تا جای ممکن از جدید ترین کامپایلر استفاده کنید تا مشکلات شما کمتر شود، این یک bug گزارش شده ، که در VC6 نمی شد به درستی از آن برای cout استفاده کرد (احتمالا سرویس پک های آن حلش کردند).

دو راه برای آن دارید:
1) راه ساده تر به جای cout و نیز استفاده از <iostream>:



printf("%I64i", x);



2) روش پیشنهادی مایکروسافت: (ضمنا از <iostream> استفاده کنید نه <iostream.h>)



#include<iostream>
using namespace std;

#ifdef WORKAROUND
std::ostream& operator<<(std::ostream& os, __int64 i )
{
char buf[20];
sprintf(buf,"%I64d", i );
os << buf;
return os;
}

#endif

int main(){
__int64 i64;

cout << i64 ;

return 0;
}

Nima_NF
چهارشنبه 10 بهمن 1386, 19:46 عصر
ضمنا long long از استاندارد C99 (سال 1999) به آن اضافه شده و در اختیار کامپایلر هایی که بعد آن عرضه شدند قرار دارد.