الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال كيفية التحويل من decimal-to-binary

مغلق
بدأه alr7al2002 في 15 سبتمبر 2003 · 16 رد · 2,344 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم في الحقيقة انا ودي الكود في السي لتحويل decimal-to-binary

ولي 32 بت

وشكرا

#2

السلام عليكم,

لم تعط إيضاحات كثيرة وحسب ما فهمت عندك عدد ديسمال وتريد أن تكتبه بالبايناري.

هناك طرق كتيرة ويأقترح عليك واحدة , أعرف أنها ليست باللبقة ولكن توضح لنا الأمور وتمكننا من فهم الموضوع أحسن.

نفترض أنه عندنا العدد 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 مثلا.

أتمنى أن تكون في هدا إفادة.

وإلى اللقاء.

#3

السلام عليكم

هذا برنامج يقوم بتحويل الاعداد العشرية إلي ثنائية :

#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);

}

حيث يقرا العدد العشري من ملف و يخزن العدد الثنائي في ملف آخر

#4

السلام عليكم

مثل هذا الشي

  
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

#5

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;

}

#6

إنتبه الكود في ال cplusplus.

use printf & scanf

#7

السلام عليكم شكرا لك اخي العزيز

ولكن ما اريده هو ان عند ادخال العدد يقوم البرنامج بتحويله الى 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

#8

السلام عليكم

ممكن يا اخي 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;
#9

السلام عليكم

اين المساعدة يا شباب

#10

السلام عليكم

اين المساعدة يا شباب

#11

المساعدة يا شباب

#12

السلام عليكم,

إن فكرتي هي ليس إعطاء برنامج كامل بل المساعدة حتى يتمكن الآخر من التطبيق والفهم الأحسن فإدا حصلنا على الجاهز فهدا سيقلل من إبداعنا.

وعلىكل حال أعطيك الكود وهو شغال ب س++ .

#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 في آخر البرنامج ليس له أية أهمية سوى أنه ينتضر دخول عدد ما حتى نرى ما يجري على الشاشة.

هدا برنامج بعجالة ويمكن تطويره أو تبسيطه .

أتمنى أن يكون في هدا إفادة وإلى اللقاء.

#13

شكرا لك اخي العزيز على هذا المجهود

#14

السلام عليكم,

كما قلت البرنامج هو من س++ لكن ليست هماك مشاكل لتغييره إلى س.

يجب فقط تغيير أدوات الدخول والخروج cin and cout .

وإلى اللقاء.

#15

غريب الكود الذي كتبته يعمل, لكن لا بأس, الكود الاخر يبدو أفضل, عندي سؤال ما وظيفه الأبراتور & و << ؟ أريد أن أعرف ربما أستعملهم في مكان ما... من يدري

الشـــــكر

#16

أعتقد أني عرفت >> و << معناهم shift left/right = ضرب/قسمه العدد ب2 بالبيناري

& = عمليه and على ال bits, لكن هل يوجد عمليات أخرى مثل or xor ألخ؟

#17

السلام عليكم,

أنا لا أريد أن أدخل معك في جدال من هو الكود الأحسن ويمكن أن أقول لك أن الإثنين لهما نفس المبدأ أو الطريقة إنما الإشكالية في Optimization فأنت تستعمل القسمة على 2 وهي نفس الشيء مثل >>1 إنما هده الأخيرة أسرع بكثير . وحتى الكود الدي كتبته أنا لا زالت فيه Optimization فهده الكتابة الأولى فمثلا for الأولى يمكنها أن تزول فهي زائدة ويمكن تحويلها ب result[32]=0 فهده تكفي.

الأوبرايتر & يعني and أي 1 و 1 تعطي 1 1 و 0 تعطي 0 و 0 مع 0 تعطي صفر.

أما الأوبراتر >> فهو يعني Shift Left أو تبديل الأبيات إلى اليسار مثلا إدا كان عندنا الرقم 110011 ونعمل له دورة وادة إلى اليسار أو >>1 يصبح الرقم هو 11001 وهي حسب تقنيات البايناري القسمة على 2 كأنك تقسم عددا عشاريا على 10.

وإلى اللقاء.

بعض العلامات انقلبت عند الكتابة هنا

هذا الموضوع مغلق.

مواضيع مشابهة