سؤال

أثناء قراءة كتاب بعنوان "دعنا" showbit() موجود والذي يمكن أن يوضح لك أجزاء الرقم. لم يكن هناك أي ملف رأس خاص مذكور لذلك. بحثت عن ذلك على الإنترنت ولم يجد أي شيء مفيد. هل هناك مثل هذه الوظيفة؟ أريد أن يطبع هذا ثنائي الأرقام العشرية. آخر من فضلك أعطني وظيفة بديلة. شكرًا

هل كانت مفيدة؟

المحلول

جميع الأعداد الصحيحة هي في الواقع في ثنائي في جهاز الكمبيوتر الخاص بك. إنه يتم تحويله إلى سلسلة تمثل تمثيلًا عشريًا لتلك القيمة عند محاولة طباعتها باستخدام PrintF و "٪ d". إذا كنت تريد أن تعرف كيف تبدو في قاعدة أخرى (مثل القاعدة 2 أو ثنائية) ، فيجب عليك توفير سلسلة تنسيق printf المناسبة إذا كانت موجودة (على سبيل المثال "٪ x" لـ Hex) أو مجرد إنشاء هذه السلسلة بنفسك و إطبعه.

فيما يلي بعض التعليمات البرمجية التي يمكنها إنشاء تمثيل سلسلة من عدد صحيح في أي قاعدة في [2،36].

#include <stdio.h>
#include <string.h>

char digits[]="01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";

void reverse(char* start, char* end)
{
    for(end--;start<end;start++,end--)
    {
        char t=*start;
        *start=*end;
        *end=t;
    }
}


int base_change(int n, int base,char* buffer)
{
    int pos=0;
    if (base>strlen(digits)) 
        return -1;
    while(n)
    {
        buffer[pos]=digits[n%base];
        n/=base;
        pos++;
    }
    buffer[pos]='\0';
    reverse(buffer,buffer+pos);
    return 0;
}

int main()
{
    char buffer[32];
    int conv=base_change(1024,2,buffer);
    if (conv==0) printf("%s\n",buffer);
    return 0;
}

نصائح أخرى

يمكنك أيضًا تجربة هذا المقتطف الذي يستخدم تغيير البتات:

تعديل: (لقد جعلته أكثر محمولة)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define BITS_IN_BYTE 8
#define INTEGRAL_TYPE unsigned int

void showBits(INTEGRAL_TYPE x) {
    int i;
    static int intSizeInBits = sizeof(INTEGRAL_TYPE) * BITS_IN_BYTE;
    static char symbol[2] = {'0','1'};
    char * binary = (char*) malloc(intSizeInBits + 1);

    memset(binary, 0, intSizeInBits + 1);

    for (i=0; i< intSizeInBits; i++) {
        binary[intSizeInBits-i-1] = symbol[(x>>i) & 0x01];
    }

    printf("%s\n", binary);
    free(binary);
}

int main() {
    showBits(8698513);
    return 0;
}

هول!

هذا حل بسيط للغاية لطباعة أجزاء عدد صحيح

int value = 14;
int n;
for (n=8*sizeof(int)-1;n>=0;n--) {
    printf("%d",(value >>n)&1);
}

تحتاج إلى النظر هنا

DownVoter يعمل بشكل جيد في C أيضا. تحتاج فقط إلى إعادة تنسيق الكود الخاص بك في أسلوب C.

#include <stdlib.h>
#include <stdio.h>
int main()
{
char buffer[20];
int  i = 3445;
_itoa( i, buffer, 2  );
printf("String of integer %d (radix 2): %s",i,buffer);
return 0;
}

*تحتاج إلى حفظ ملفك كـ .c في msvc ++ لـ _itoa () للعمل.*

هذا هو ملف الرأس للعرض

 void showbits(unsigned int x)
    {
        int i;
        for(i=(sizeof(int)*5)-1; i>=0; i--)
            (x&(1u<<i))?putchar('1'):putchar('0');
        printf("\n");
    }

لا ، لا توجد وظيفة مسبقة ولا تحتاج إلى تضمين أي ملف رأس محدد. سيتعين عليك توفير تنفيذ لعمليات العرض الوظيفية (int).

#include <stdio.h>
void showbits(int);
int main()
{
    int j,k;
    for(j=0;j<=11;j++)
    {
        printf("\nBinary value of decimal %d is :",j);
        showbits(j);

    }
    return 0;
}
showbits(int n){
    int i,k,andmask;
    for(i = 15;i>=0;i--){
        andmask = 1<<i;
        k = n & andmask;
        k==0 ? printf("0"):printf("1");
    }
}

إذا كنت ترغب في طباعة أجزاء العائمة ، على سبيل المثال ، يمكنك أن تفعل شيئًا مثل:

float myFloat = 45.2;
for (int n=0;n<8*sizeof(float);n++) {
    printf("%d",(myFloat>>n)&1);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top