我试图打印long的二进制表示,以便在long中练习位操作并为我正在处理的项目设置各种位我可以成功地在ints上打印位,但是每当我尝试打印64位的长字符时,输出就很糟糕。
这是我的代码:

#include <stdio.h>

void printbits(unsigned long n){
    unsigned long i;
    i = 1<<(sizeof(n)*4-1);
    while(i>0){
         if(n&1)
              printf("1");
         else
              printf("0");
         i >>= 1;
}

int main(){
    unsigned long n=10;
    printbits(n);
    printf("\n");
}

我的输出是000000000000000000000011111111111111111111111111111110。
谢谢你的帮助!

最佳答案

4不是一个字节中正确的位数
即使您将其分配给一个unsigned long1 << …也是一个int,因此您需要1UL
n&1应该是n&i
缺少右大括号
仅修复:

#include <limits.h>
#include <stdio.h>

void printbits(unsigned long n){
    unsigned long i;
    i = 1UL<<(sizeof(n)*CHAR_BIT-1);
    while(i>0){
         if(n&i)
              printf("1");
         else
              printf("0");
         i >>= 1;
    }
}

int main(){
    unsigned long n=10;
    printbits(n);
    printf("\n");
}

如果你想打印一个64位数字,我会硬编码64并使用uint_least64_t

关于c - 打印长的二进制64位表示形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52845040/

10-16 19:16