PDA

View Full Version : مبتدی: نوشتن اعداد بصورت باینری



vasilopita
جمعه 14 بهمن 1390, 17:45 بعد از ظهر
سلام. من می خوام یک عدد رو بصورت باینری بنویسیم و در یک کاراکتر ذخیرش کنم؛ چجور می تونم باینری بنویسم. هگزادسیمال رو بلدم که با 0x شروع میشه ولی باینری رو نمی دونم.

Omid707
جمعه 14 بهمن 1390, 18:35 بعد از ظهر
سلام. من می خوام یک عدد رو بصورت باینری بنویسیم و در یک کاراکتر ذخیرش کنم؛ چجور می تونم باینری بنویسم. هگزادسیمال رو بلدم که با 0x شروع میشه ولی باینری رو نمی دونم.
سلام
راستش من نمیدونم چطوری میشه عدد رو در کارکتر ذخیره کرد چون خود کارکتر ها هم کد اسکی که یه عدده دارند شاید منظور شما یک رشته بوده؟
اما اگه منطق تبدیل اعداد رو بصورت باینری میخواهید اینکار با تقسیم های متوالی انجام میشه حوصله توضیح کامل ندارم قبلا یه برنامه برای تبدیل اعداد در مبناهای مختلف نوشتم ببین بدرد میخوره


//جواب تمرین 18-5 ص 223
/* باینری-عدد بر مبنای 2
برای تبدیل دسیمال به باینری عدد را بطور متوالی بر 2 تقسیم می کنیم
ودرنهایت از کنار هم قرار دادن ابتدا عدد آخرین خارج قسمت و سپس
اعداد باقیمانده از راست به چپ بدست می آید
*/
/* اوکتال-عدد بر مبنای 8
برای تبدیل دسیمال به اوکتال عدد را بطور متوالی بر 8 تقسیم می کنیم
ودرنهایت از کنار هم قرار دادن ابتدا عدد آخرین خارج قسمت و سپس
اعداد باقیمانده از راست به چپ بدست می آید
*/
/* هگزادسیمال-عدد بر مبنای 16
برای تبدیل دسیمال به اوکتال عدد را بطور متوالی بر 16 تقسیم می کنیم
ودرنهایت از کنار هم قرار دادن ابتدا عدد آخرین خارج قسمت و سپس
اعداد باقیمانده از راست به چپ بدست می آید
*/
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::fixed;
using std::left;
#include <cmath>
#include <iomanip>
using std::setprecision;
using std::setw;

int main()
{
int Decimal;
int Binary;
int Octal;
int Hexadecimal;
int Result;
int s;
int counter;

cout<<left;
cout<<setw(10)<<"Decimal"<<setw(15)<<"\tBinary\t"<<setw(6)
<<" Octal\t"<<setw(10)<<"Hexadecimal"<<endl;

for(int i=1;i<=256;i++)
{
//تبدیل عدد دسیمال به عدد باینری
Decimal=i;
Binary=0;
counter=0;
for(int t=Decimal;t>0;)
{
Result=Decimal/2;
s=Decimal%2;

Decimal=Result;
Binary+=s*pow(static_cast<double>(10),counter);
counter++;
t=Decimal;
}
//تبدیل عدد دسیمال به عدد اوکتال
Decimal=i;//قبل از شروع هر حلقه متغییر ها دوباره مقدار دهی میشوند
Octal=0;
counter=0;
for(int t=Decimal;t>0;)
{
Result=Decimal/8;
s=Decimal%8;

Decimal=Result;
Octal+=s*pow(static_cast<double>(10),counter);
counter++;
t=Decimal;
}
//تبدیل عدد دسیمال به عدد هگزادسیمال
Decimal=i;
Hexadecimal=0;
counter=0;
for(int t=Decimal;t>0;)
{
Result=Decimal/16;
s=Decimal%16;

Decimal=Result;
Hexadecimal+=s*pow(static_cast<double>(10),counter);
counter++;
t=Decimal;
}
Decimal=i;

cout<<setw(10)<<Decimal<<"\t"<<setw(15)<<Binary
<<"\t"<<setw(6)<<Octal<<"\t"<<setw(10)<<Hexadecimal<<endl;
}

return 0;
}

vasilopita
شنبه 15 بهمن 1390, 08:48 قبل از ظهر
ممنونم دوست عزیز ولی من نمی خوام تبدیل انجام بدم. دقیقا می خوام عدد رو بصورت باینری داشته باشم. از اونجایی که یک کاراکتر 8 بیت تشریف داره می شه یه عدد 8 بیتی در مبنای دو رو چپوند توش! حالا من مشکلم اینه که نمی دونم چجوری عدد رو باید بصورت دودویی بنویسم

shahmohammadi
شنبه 15 بهمن 1390, 12:53 بعد از ظهر
با سلام.
در متن زیر گرامر مربوط به ثابت های عددی صحیح رو در سی می بینیم. همونطور که می بینید ثابت های عددی رو فقط به صورت ده تایی، هشت تایی، و شانزده تایی می شه نوشت و نوع باینری تو گرامر نیست. ولی به جاش می تونید از هگزا استفاده کنید چون چندان فرقی هم با هم ندارند. اگه تبدیل ذهنی این دوتا رو بلد باشید می بینید که کار با هگزا بهتره.
Integer constants

Syntax

integer-constant:
decimal-constant integer-suffix<opt>
octal-constant integer-suffix<opt>
hexadecimal-constant integer-suffix<opt>

decimal-constant:
nonzero-digit
decimal-constant digit

octal-constant:
0
octal-constant octal-digit

hexadecimal-constant:
0x hexadecimal-digit
0X hexadecimal-digit
hexadecimal-constant hexadecimal-digit

nonzero-digit: one of
1 2 3 4 5 6 7 8 9

octal-digit: one of
0 1 2 3 4 5 6 7

hexadecimal-digit: one of
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F

integer-suffix:
unsigned-suffix long-suffix<opt>
long-suffix unsigned-suffix<opt>

unsigned-suffix: one of
u U

long-suffix: one of
l L

shahmohammadi
شنبه 15 بهمن 1390, 21:01 بعد از ظهر
ماکرو هایی که برای این کار تعریف می شه عدد رو به صورت باینری می گیره و به صورت 0xhex حساب می کنه. (سرعت بالا)
اینجا (http://www.velocityreviews.com/forums/t318127-using-binary-numbers-in-c.html) و اینجا (http://bytes.com/topic/c/answers/461043-how-convert-binary-hex-using-macro) هم با چند روش ماکرو رو تعریف کردند.
موفق باشد.

pe32_64
یکشنبه 16 بهمن 1390, 14:51 بعد از ظهر
سلام. من می خوام یک عدد رو بصورت باینری بنویسیم و در یک کاراکتر ذخیرش کنم؛ چجور می تونم باینری بنویسم. هگزادسیمال رو بلدم که با 0x شروع میشه ولی باینری رو نمی دونم.
همونطور که دوستان گفتند اینکار امکانپذیر نیست.
شما باید اونو به hexadecimal تبدیل کنید.(با hexadecimal راحتتره! )

vasilopita
یکشنبه 16 بهمن 1390, 23:19 بعد از ظهر
از همگی دوستان ممنونم