C 打印长格式的二进制64位表示法
我试图打印long的二进制表示,以便练习位操作,并为我正在进行的项目设置long中的各种位。我成功地在ints上打印了位,但每当我尝试打印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)
#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
如果你想打印一个64位的数字,我会硬编码64并使用1=1; } } int main(){ 无符号长n=10; 打印位(n); printf(“\n”); }
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位。您需要
的输出的所有可能的重复项?请注意,long不一定是64位。您需要1打印位(0)
的输出的所有可能的重复项?您需要1打印位(0)
(在sizeof(n)*字符位
中定义)。如果您想要的类型正好是64位,请使用
。如果您至少需要64位,请使用uint64\u t
或unsigned long long
uint\u least64\u t
会更好(1LL
1LL您想要的
(在sizeof(n)*字符位
中定义)。如果你想要一个正好是64位的类型,请使用
。如果你想要至少64位,请使用uint64\u t
或unsigned long
uint\u least64\u t
更好(1LL
1LL-,为了好玩,来处理那些填充的
实现,(在计算机墓地中腐烂),代码可以使用便携的unsigned long
Ry-,为了好玩,可以处理那些填充的i=ULONG_MAX-ULONG_MAX/2;
未签名的长的
实现(在计算机墓地中腐烂),代码可以使用可移植的
没有递归调用。哎呀,我的坏,我重命名了函数,使其更内联到OP-choosed的名称,但忘记了重命名递归调用。现在应该已修复。没有递归调用。哎呀,我的坏,我重命名了函数,使其更内联到OP-choosed和也忘记重命名递归调用。现在应该修复。i=ULONG_MAX-ULONG_MAX/2;