我试图打印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 long
,1 << …
也是一个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/