Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 打印长格式的二进制64位表示法_C_Bit Manipulation - Fatal编程技术网

C 打印长格式的二进制64位表示法

C 打印长格式的二进制64位表示法,c,bit-manipulation,C,Bit Manipulation,我试图打印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)

我试图打印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"); 
}
#包括
无效打印位(无符号长n){
无符号长i;
i=1>=1;
}
int main(){
无符号长n=10;
打印位(n);
printf(“\n”);
}
我的输出是0000000000000000000000 11111111111111111111111 0。 谢谢你的帮助

  • 4不是一个字节中正确的位数
  • 即使将其分配给一个
    无符号long
    1=1;
    }
    }
    int main(){
    无符号长n=10;
    打印位(n);
    printf(“\n”);
    }
    
    如果你想打印一个64位的数字,我会硬编码64并使用
    uint\u-least64\u-t

    • 4不是一个字节中正确的位数
    • 即使将其分配给一个
      无符号long
      1=1;
      }
      }
      int main(){
      无符号长n=10;
      打印位(n);
      printf(“\n”);
      }
      

      如果你想打印一个64位的数字,我会硬编码64,然后使用
      uint\u至少64\u t
      问题是
      I=1问题是
      I=1以下应该是你想要的:

      #include <stdio.h>
      
      void printbits(unsigned long number, unsigned int num_bits_to_print)
      {
          if (number || num_bits_to_print > 0) {
              printbits(number >> 1, num_bits_to_print - 1);
              printf("%d", number & 1);
          }
      }
      
      void printbits64(unsigned long number) {
          printbits(number, 64);
      }
      

      以下操作应满足您的要求:

      #include <stdio.h>
      
      void printbits(unsigned long number, unsigned int num_bits_to_print)
      {
          if (number || num_bits_to_print > 0) {
              printbits(number >> 1, num_bits_to_print - 1);
              printf("%d", number & 1);
          }
      }
      
      void printbits64(unsigned long number) {
          printbits(number, 64);
      }
      

      请注意,long不一定是64位。您需要
      1打印位(0)
      的输出的所有可能的重复项?请注意,long不一定是64位。您需要
      1打印位(0)
      的输出的所有可能的重复项?您需要
      sizeof(n)*字符位
      (在
      中定义)。如果您想要的类型正好是64位,请使用
      uint64\u t
      。如果您至少需要64位,请使用
      unsigned long long
      uint\u least64\u t
      1LL
      会更好(
      1LL您想要的
      sizeof(n)*字符位
      (在
      中定义)。如果你想要一个正好是64位的类型,请使用
      uint64\u t
      。如果你想要至少64位,请使用
      unsigned long
      uint\u least64\u t
      1LL
      更好(
      1LL-,为了好玩,来处理那些填充的
      unsigned long
      实现,(在计算机墓地中腐烂),代码可以使用便携的
      i=ULONG_MAX-ULONG_MAX/2;
      Ry-,为了好玩,可以处理那些填充的
      未签名的长的
      实现(在计算机墓地中腐烂),代码可以使用可移植的
      i=ULONG_MAX-ULONG_MAX/2;
      没有递归调用。哎呀,我的坏,我重命名了函数,使其更内联到OP-choosed的名称,但忘记了重命名递归调用。现在应该已修复。没有递归调用。哎呀,我的坏,我重命名了函数,使其更内联到OP-choosed和也忘记重命名递归调用。现在应该修复。