السلام عليكم في الحقيقة انا ودي الكود في السي لتحويل decimal-to-binary
ولي 32 بت
وشكرا
السلام عليكم في الحقيقة انا ودي الكود في السي لتحويل decimal-to-binary
ولي 32 بت
وشكرا
السلام عليكم,
لم تعط إيضاحات كثيرة وحسب ما فهمت عندك عدد ديسمال وتريد أن تكتبه بالبايناري.
هناك طرق كتيرة ويأقترح عليك واحدة , أعرف أنها ليست باللبقة ولكن توضح لنا الأمور وتمكننا من فهم الموضوع أحسن.
نفترض أنه عندنا العدد x وهو من نوع 32 بايت فهدا العدد إدن يحتوي على 32 علامة 1 أ0 ليكون لنا العدد x .فالطريقة هنا أننا سنرى كيف حال كل بايت.
نوضع بافر الدي سنضع فيه النتائج.
char result[33] أخدنا هدا لنضع فيه نتيجة كل بت وطوله 33 لأننا سنضع في الأخير 0 ليكون لدينا Null terminated string . إدن نقوم ب result[32]=0 .
نبدأ بفحص البت الأول ونقوم بالعملية : a=x & 1 هنا قمنا بعملية and مع 1 وهنا ضمنيا كل الأبيات من واحد إلى الأخير ستكون صفر إلا البت رقم 0 أو الأول فستكون النتيجة 1 إدا كان البت 1 و0 في الحالة الأخرى وإدن إدا كان a=1 نضع result[31]='1' ; وفي الحالة الأخرى نضع رمز الصفر '0' نلاحظ 1 أو 0 بين الشرطتين.
بعد هدا نفحص البت الثاني نقوم بدورة للأبيات x=x >> 1 هده تقوم بالعملية التالية البت 32 يرجع في 31 31 في 30 إلى آخره.
هنا نعيد ما سبق a=x & 1 ونسجل النتيجة في result[30] وهكدا حتى نمر على جميع الأبيات.
هكدا تبدأ الأمور كثيرة لكن يمكن أن نعمل كل هدا باستعمال FOR مثلا.
أتمنى أن تكون في هدا إفادة.
وإلى اللقاء.
السلام عليكم
هذا برنامج يقوم بتحويل الاعداد العشرية إلي ثنائية :
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
void main()
{
FILE *f,*g;
char f1[20],f2[20];
int temp;
int c,i;
printf("\n");
printf("enter file name to read from:");
gets(f1);
printf("enter new file name:");
gets(f2);
f=fopen(f1,"r");
g=fopen(f2,"w");
fscanf(f,"%d",&c);
while(!feof(f)){
i=0;
temp=c;
while(!(temp &0x8000 )&&(i<16))
{
temp<<=1;
i++;
}
for(;i<16;i++)
{
(temp&0x8000)? fprintf(g,"1"):fprintf(g,"0");
temp<<=1;
}
fscanf(f,"%d",&c);
fprintf(g,"\n");
}
fclose(f);
fclose(g);
}
حيث يقرا العدد العشري من ملف و يخزن العدد الثنائي في ملف آخر
السلام عليكم
مثل هذا الشي
enter decimal number: 1 1 = 0000 0000 0000 0000 0000 0000 0000 0001 (binary) enter decimal number: -2 -2 = 1111 1111 1111 1111 1111 1111 1111 1110 (binary)
تم تعديل هذه المشاركة بواسطة alr7al2002 في 17 سبتمبر 2003 في 03:57
here is the code, please check the 2s complement, i did not check the code. yalla slamat
#include <iostream>
using namespace std;
int main() {
int n; // number to convert to binary
int reg[32];
int i, x=1;
for (i=0 ; i<32 ; i++) reg = 0;
cout << "enter decimal number: ";
cin >> n;
cout << "(binary) ";
i = 3;
if (n > 0) {
while (n > 0) {
if (!(i%4)) i = 4 * x++ - 1;
reg[i--] = n%2;
n /= 2;
}
} else {
n *= -1;
while (n > 0) {
if (!(i%4)) i = 4 * x++ - 1;
reg[i--] = n%2;
n /= 2;
}
for (i=0 ; i<32 ; i++) reg = (reg+1)%2;
x = 1;
i = 3;
while (i < 32) {
if (!(i%4)) i = 4 * x++ - 1;
reg++;
if (reg == 1) break;
reg[i--] = 0;
}
}
for (i=0 ; i<32 ; i++) {
cout << reg;
if (!((i+1)%4)) cout << " ";
}
cout << endl << "\n(binary) in reverse order (little indian?!!) written by Mahmood" << endl;
return 0;
}
إنتبه الكود في ال cplusplus.
use printf & scanf
السلام عليكم شكرا لك اخي العزيز
ولكن ما اريده هو ان عند ادخال العدد يقوم البرنامج بتحويله الى binary
اي الى 01 من ثم يطبع الناتج على الشاشة مثل المثال الذي ذكرته سابقا
هذا محصلت عليه من البرنامج
enter decimal number: 1 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) enter decimal number: 0 (binary) 1001 1111 1111 1111 1111 1111 1111 1111
مع السلامة
تم تعديل هذه المشاركة بواسطة alr7al2002 في 19 سبتمبر 2003 في 15:35
السلام عليكم
ممكن يا اخي chik
انت تكتب الكود بصورة مبسطة لاني لم اعرف كيفية كتابة الكود وشكرا
الكود
#include <iostream>
using namespace std;
main()
{
int x;
char result[33]=0;
int a;
for(int i=0;i<x+1;i++)
{
i=x & 1;
if(a==1 || a==0)
{
result[31]=1;
}
x=x>>1;
a=x & 1;
result[30]=a;
}
cout<<result<<endl;السلام عليكم
اين المساعدة يا شباب
السلام عليكم
اين المساعدة يا شباب
المساعدة يا شباب
السلام عليكم,
إن فكرتي هي ليس إعطاء برنامج كامل بل المساعدة حتى يتمكن الآخر من التطبيق والفهم الأحسن فإدا حصلنا على الجاهز فهدا سيقلل من إبداعنا.
وعلىكل حال أعطيك الكود وهو شغال ب س++ .
#include "stdafx.h"
#include <iostream.h>
int main(int argc, char* argv[])
{
int x ,a;
char result[33];
for(int i=0;i<33;i++)
result=0;
cin >> x;
for(i=0;i<32;i++)
{
a= x & 1 ;
if (a==1)
{
result[31-i]='1';
}
else
{
result[31-i]='0';
}
x=x >>1;
}
cout <<"\n";
cout << result ;
cout <<"\n" ;
cin >> x;
return 0;
}
مع العلم أن cin في آخر البرنامج ليس له أية أهمية سوى أنه ينتضر دخول عدد ما حتى نرى ما يجري على الشاشة.
هدا برنامج بعجالة ويمكن تطويره أو تبسيطه .
أتمنى أن يكون في هدا إفادة وإلى اللقاء.
شكرا لك اخي العزيز على هذا المجهود
السلام عليكم,
كما قلت البرنامج هو من س++ لكن ليست هماك مشاكل لتغييره إلى س.
يجب فقط تغيير أدوات الدخول والخروج cin and cout .
وإلى اللقاء.
غريب الكود الذي كتبته يعمل, لكن لا بأس, الكود الاخر يبدو أفضل, عندي سؤال ما وظيفه الأبراتور & و << ؟ أريد أن أعرف ربما أستعملهم في مكان ما... من يدري
الشـــــكر
أعتقد أني عرفت >> و << معناهم shift left/right = ضرب/قسمه العدد ب2 بالبيناري
& = عمليه and على ال bits, لكن هل يوجد عمليات أخرى مثل or xor ألخ؟
السلام عليكم,
أنا لا أريد أن أدخل معك في جدال من هو الكود الأحسن ويمكن أن أقول لك أن الإثنين لهما نفس المبدأ أو الطريقة إنما الإشكالية في Optimization فأنت تستعمل القسمة على 2 وهي نفس الشيء مثل >>1 إنما هده الأخيرة أسرع بكثير . وحتى الكود الدي كتبته أنا لا زالت فيه Optimization فهده الكتابة الأولى فمثلا for الأولى يمكنها أن تزول فهي زائدة ويمكن تحويلها ب result[32]=0 فهده تكفي.
الأوبرايتر & يعني and أي 1 و 1 تعطي 1 1 و 0 تعطي 0 و 0 مع 0 تعطي صفر.
أما الأوبراتر >> فهو يعني Shift Left أو تبديل الأبيات إلى اليسار مثلا إدا كان عندنا الرقم 110011 ونعمل له دورة وادة إلى اليسار أو >>1 يصبح الرقم هو 11001 وهي حسب تقنيات البايناري القسمة على 2 كأنك تقسم عددا عشاريا على 10.
وإلى اللقاء.
بعض العلامات انقلبت عند الكتابة هنا
هذا الموضوع مغلق.