View Full Version : نمایش یک عدد به صورت باینری
paradise_human
چهارشنبه 05 اسفند 1388, 00:06 صبح
سلام .
من میخوام یه عدد به صورت باینری چاپ کنم .
مثلا من وارد میکنم 65.
میخوام این عدد و به صورت بیتی برام چاپ کنه .
البته میدونم این عدد به صورت باینری یا همون بیتی میشه 00000101
ولی میخوام در حالت کلی هر عددی رو وارد کردیم اون عدد رو به صورت باینری برام چاپ کنه .
کسی میتونه کمک کنه ؟
simul8or
چهارشنبه 05 اسفند 1388, 00:55 صبح
یک تابع بنویسید و در هر مرحله باقیمانده تقسیم عدد بر 2 را درون پشته قرار دهید(push in stack) سپس با فراخوانی مقادیر پشته (pop) به راحتی می توانید مقدار باینری را نمایش دهید.
با استفاده از STL نیز می توان این کار را انجام داد.
بانوی ایران
چهارشنبه 05 اسفند 1388, 00:55 صبح
شما الگوريتم باينري كردن يه عدد رو ميخواي؟
يا دنبال يه تعريف كتابخونه اي هستي؟
اگر الگوريتمشو ميخواين
سادس از همون كاري كه به صورت دستي انجام ميديد يعني باقيمانده تقسيمات متوالي بر 2 رو به صورت يه الگوريتم در بياريد
Rain_Song
چهارشنبه 05 اسفند 1388, 01:23 صبح
از طریقshift دادن و and کردن باینری عدد رو می تونیم حساب کنیم. اینم برنامش :
#include <iostream>
#include <math.h>
using namespace std ;
int main ()
{
int x ;
cin >> x ;
int y = 0x80000000 ;
while (y)
{
if (x & y)
cout << 1 ;
else
cout << 0 ;
y = (unsigned int) y >> 1 ;
}
return 0 ;
}
amin1softco
چهارشنبه 05 اسفند 1388, 06:14 صبح
ولی اگر هدف فقط نمایش عدد در مبنا های مخلف باشه این ساده ترین راهه البته فکر کنم
#include <stdlib.h>
void printb(int num){
char str[8];
printf("%s",itoa(num, str, 2));
}
void printoct(int num){
char str[8];
printf("%s",itoa(num, str, 8));
}
void printhex(int num){
char str[8];
printf("%s",itoa(num, str, 16));
}
که اولی باینری یا نمایش در مبنا 2
دومی اکتال 8
سومی هگزدسیمال 16
و اینم برای تبدیل به مبنای 2 به روش ساده
#include <bitset>
int b;
cin>>b;
cout<<bitset<8>(b);
paradise_human
چهارشنبه 05 اسفند 1388, 13:09 عصر
ممنون بابت جواب های کاملتون.
و اما یک سوال دیگه چطور میشه 4 بایت یک منغیر long int رو در 4 متغیر ذخیره کرد ؟
اصلا چطور میشه به بیت های یک عدد دسترسی پیدا کرد و اونها رو به یک متغیر دیگه برد ؟
amin1softco
چهارشنبه 05 اسفند 1388, 15:58 عصر
خوب شما یک نگاهی به جواب Rain_Song بنداز متوجه میشی به این لینک (http://www.fredosaurus.com/notes-cpp/expressions/bitops.html) هم یک سر بزن
8 بیت شیفت بده بزار در یک متغیر دیگه این که خیلی سادست :متفکر:
یک مثال ساده تبدیل یک متغییر از نوع چار به بیت ها سازنده برگرفته از http://cboard.cprogramming.com
printf("%c%c%c%c%c%c%c%c",
(ch&0x80)?'1':'0',
(ch&0x40)?'1':'0',
(ch&0x20)?'1':'0',
(ch&0x10)?'1':'0',
(ch&0x08)?'1':'0',
(ch&0x04)?'1':'0',
(ch&0x02)?'1':'0',
(ch&0x01)?'1':'0'
);
paradise_human
چهارشنبه 05 اسفند 1388, 22:05 عصر
خوب شما یک نگاهی به جواب Rain_Song بنداز متوجه میشی به این لینک (http://www.fredosaurus.com/notes-cpp/expressions/bitops.html) هم یک سر بزن
8 بیت شیفت بده بزار در یک متغیر دیگه این که خیلی سادست :متفکر:
یک مثال ساده تبدیل یک متغییر از نوع چار به بیت ها سازنده برگرفته از http://cboard.cprogramming.com
printf("%c%c%c%c%c%c%c%c",
(ch&0x80)?'1':'0',
(ch&0x40)?'1':'0',
(ch&0x20)?'1':'0',
(ch&0x10)?'1':'0',
(ch&0x08)?'1':'0',
(ch&0x04)?'1':'0',
(ch&0x02)?'1':'0',
(ch&0x01)?'1':'0'
);
نه فکر کنم شما منظور منو متوجه نشدید .
من میخوام هر بایت رو در یک متغیر بریزم .
یعنی اگه 4 بایتی باشه ،بایت اول در یک متغیر بایت دوم در متغیر دوم و .....
amin1softco
پنج شنبه 06 اسفند 1388, 00:03 صبح
نه فکر کنم شما منظور منو متوجه نشدید .
من میخوام هر بایت رو در یک متغیر بریزم .
یعنی اگه 4 بایتی باشه ،بایت اول در یک متغیر بایت دوم در متغیر دوم و .....
#include <iostream>
using namespace std;
void main(){
int a[5];
a[0]=(0xf);
for (int i=4,j=1;i<=32;i*=2){ a[j]=(a[0]>>i);cout<<a[j++]<<" i="<<i<<" j="<<j<<endl;};
}
وقتی بیت ها رو شیفت بدیم خیلی راحت میشه عدد رو تجزیه کرد ولی .... :متفکر: مشکل شما کجاست من نمی دونم>؟؟
paradise_human
پنج شنبه 06 اسفند 1388, 11:35 صبح
دوستان این برنامه هون چیزیه که من دنبالشم .
#include <iostream>
#include <bitset>
using std::cin;
using std::cout;
using std::endl;
using std::bitset;
void main()
{
long int i;
char a,b,c,d;
cin>>i;
cout<<bitset<32>(i)<<endl;
a=i;
cout<<bitset<8>(a)<<endl;
b=i>>8;
cout<<bitset<8>(b)<<endl;
c=i>>16;
cout<<bitset<8>(c)<<endl;
d=i>>24;
cout<<bitset<8>(d)<<endl;
}
فقط یک سوال :
بر فرض مثال عدد رو وارد میکنیم 2147483647 (بزرگترین عدد long int با علامت ).
من وقتی اونا رو توی یک متغیر کارکتری ریختم 8 بیت اول خوب همون چیزیه که من میخوام ولی بقیه ی بیت ها رو تبدیل به یک کرده!
اگه اون دستور bitset رو از 8 به 32 تغییر بدبد متوجه میشید من چی میگم .
نمیشه کاری کرد که بقیه ی بیت ها صفر بشن ؟
اگه ممکنه تو اون یه تیکه کمکم کنید .
البته درسته چون char یک بایت بیشتر نمیپذیره نه ؟
پس تکلیف اون یک ها چی میشه ؟
ممنون.
amin1softco
پنج شنبه 06 اسفند 1388, 13:46 عصر
اون هشت تعداد بیت های عدده مثلا int =32 بیته long = 32 char=8 بیته و الا آخر در ضمن اگه شما می خوهید که هر 8 بیت که بشه 1 بایت رو در یک عدد بگذارید باید از & استفاده کنید یعنی با قبلی اندش کنید تا در بیت های فعلی بیت های کارکتر قبلی از بین بره
amin1softco
جمعه 07 اسفند 1388, 00:07 صبح
برنامه ایی که یک متغیر عددی از نوع int با سایز 32 بیت را به چهار متغیر 8بیتی (1 بایت) تبدیل و ذخیره می کنه البته این متغیر ها ناصر آرایه هستند.
#include <iostream>
#include <bitset>
using namespace std;
void main(){
int a[5];
a[0]=(0xabcdfffa);
cout<<bitset<32>(a[0])<<"\n\n";
for (int i=32,j=1;i>0;i-=8,j++){a[j]=(a[0]>>(i-8)); a[j]=((a[j]<<23)&(~(1<<31)));a[j]=(a[j]>>23);cout<<bitset<32>(a[j])<<" "<<a[j]<<" i="<<i<<" j="<<j<<endl;};
system("PAUSE");
}
این فکر کنم دقیقا اون چیزی هست که دنبالشی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.