PDA

View Full Version : با چه دستوری بفهمیم کامپیوتر 32 بیتی



kosar ranjbar
سه شنبه 14 مهر 1388, 19:05 عصر
با چه دستوری در c++ بفهمیم که کامپیوتر 32 بیتی یا 16 بیتی ؟؟؟؟؟؟؟

tdkhakpur
سه شنبه 14 مهر 1388, 20:22 عصر
خوب اگر داخل ویندوز باشی مطمئن باش که از 32 بیت کمتر نیست.
ولی در حالت کلی فکر کنم باید از دستورات اسمبلی که مربوط به cpu با باند 32 هست استفاده کنی تا مشخص شود .
امتحان نکردم ولی فکر کنم کامپایلر این سوئیچها را به هنگام کامپایل به همراه کد برنامه قرار میده تا درصورت suport نکردن سیستم عامل از باند مورد نظر آنرا به سطح پایین نزول دهد.

kosar ranjbar
سه شنبه 14 مهر 1388, 21:26 عصر
من می خوام بدونم آیا تابعی یا دستوری هست که مشخص کند 32 بیتی یا 64 بیتی

alamate_aoal
سه شنبه 14 مهر 1388, 23:56 عصر
خوب اگر داخل ویندوز باشی مطمئن باش که از 32 بیت کمتر نیست.

منظورتون اینه که تمام ویندوزها , بالای 32 و یا 32 بیتی اند !!!

Nima_NF
سه شنبه 14 مهر 1388, 23:57 عصر
API های زیر در ویندوز:

- تابع GetSystemInfo و GetNativeSystemInfo برای مشخص کردن سخت افزار (X64 یا X86 یا Itanium و ... ) و سیستم عامل که 64 بیت هست یا خیر.

در MSDN نیز مثال وجود دارد

kosar ranjbar
چهارشنبه 15 مهر 1388, 05:20 صبح
با چه سرآیندی می توان از این تابع GetSystemInfo و GetNativeSystemInfo استفاده کرد

mortezamsp
چهارشنبه 15 مهر 1388, 12:06 عصر
كامپيوتر 64 بيتي دستورات graphics.h در turbo c++ رو اجرا نميكنه.يه برنامه گرافيكي در توربو رو ببر تو كامپيوتر اگه اجرا نشد 64 بيتي هستش.

tdkhakpur
چهارشنبه 15 مهر 1388, 13:04 عصر
منظورتون اینه که تمام ویندوزها , بالای 32 و یا 32 بیتی اند !!!
آره عزیزم.

deopen
چهارشنبه 15 مهر 1388, 13:42 عصر
این هم مثالی از " GetVersionEx (http://msdn.microsoft.com/en-us/library/ms724451%28VS.85%29.aspx), GetSystemMetrics (http://msdn.microsoft.com/en-us/library/ms724385%28VS.85%29.aspx), GetProductInfo (http://msdn.microsoft.com/en-us/library/ms724358%28VS.85%29.aspx), and GetNativeSystemInfo (http://msdn.microsoft.com/en-us/library/ms724340%28VS.85%29.aspx)"

http://msdn.microsoft.com/en-us/library/ms724429%28VS.85%29.aspx

Nima_NF
چهارشنبه 15 مهر 1388, 16:09 عصر
با چه سرآیندی می توان از این تابع GetSystemInfo و GetNativeSystemInfo استفاده کرد
در کامپایلرهای تحت ویندوز در سرآیند Windows.h

حامد مصافی
چهارشنبه 15 مهر 1388, 17:14 عصر
این راه حل را نیز امتحان کنید

#ifdef _WIN32
cout << "This is 32-bit windows";
#endif
#ifdef _WIN16
cout << "This is 32-bit windows";
#endif

alamate_aoal
پنج شنبه 16 مهر 1388, 01:55 صبح
آره عزیزم.
نخیر عزیزم
شما 100% اشتباه میکنید

ali zi zeperto
جمعه 17 مهر 1388, 12:26 عصر
برای لینوکس از چه راهی باید استفاده کرد که بفهمید چند بیتیه.
یه روش بدون تابع . توضیح هم بدید کافیه.
ممنون

deopen
شنبه 18 مهر 1388, 14:14 عصر
من یک روشی به ذهنم رسید , نمی دونم کاملا درست هست یا نه , ولی قاعدتا در سیستم های 32 بیتی اشاره گر ها 4 byte حافظه اشغال میکنند و int هم 4 byte حافظه اشغال میکند, و UINT_MAX برابر 2 به توان 32 منهای 1 بخاطر صفر میباشد :


#include<iostream>
using std::cout;

#include<windows.h>


int main() {

long long n;

cout<<sizeof(n)<<"<<if 64 bit : 8 else Not Def\n\n";

cout<<sizeof(int)<<"<<if 32 bit : 4 else 16 bit\n\n";

cout<<UINT_MAX<<"<<if 32 bit : (2^32)-1 else 16 bit\n\n";

cout<<sizeof(void *)<<"<<if 32 bit : 4 else 16 bit\n\n";


system("pause");


return 0;


}و همینطور متغیر های دیگر در ماشین های 64 بیتی و یا کامپایلر های 16 بیتی یا 64 بیتی با هم فرق می کنند در کل اینجا برای من سوال پیش آمد که منظور شما از این سوال ماشین است یا سیستم عامل , به هر حال اگر روشی که گفتم درست باشد , شما میتوانید از آن استفاده کنید , البته ممکن است که در یک محیط 64 بیتی با کامپایلر 16 بیتی کار کنید که من این را تست نکردم و فکر کنم که این روش به درستی جواب ندهد باز هم در این مورد اطمینان ندارم.

من یک سیستم عامل 64 بیتی و یک کامپایلر 32 بیتی دارم , خوب کامپایلر من 32 بیتی کار میکند و اشاره گر ها 4 بایت حافظه اشغال می کنند در صورتی که فکر کنم در برنامه ها ی 64 بیتی اشاره گر ها 8 byte حافظه میگیرند , اگر سیستم شما 64 بیتی نیست می توانید نوع long long را تست کنید که آیا این موضوع درست هست که همچین نوعی در سیستم های 32 بیتی تعریف نشده است؟