(C语言)如何将一个数字的二进制形式输出出来

(C语言)如何将一个数字的二进制形式输出出来

一. 我们知道由十进制转二进制的算法,因此可以直接计算出其二进制数

例如:对3求其二进制

int main()

{

int n = 3;

int arr[33] = { 0 };//int 型有32个字节

int i = 0;

while (n > 0)

{

arr[i] = n % 2;

++i;

n /= 2;

}

int k = 0;

for (k = i-1; k >= 0; k--) //逆序输出

{

printf("%d", arr[k]);

}

return 0;

}

二. 因为数字在计算机中就是以二进制的形式存储的,那我们也可以通过 位运算符 来表示出一个数的二进制。

用&(按位与)运算符,其运算原理是对其两个操作数的计算机内存储的二进制形式(补码)的对应位进行按位与,如果1&1结果是1,其他结果都是0。

例如 3&5:

int a = 3;

//a: 00000000000000000000000000000011

int b = 5;

//b: 00000000000000000000000000000101

int c = a & b;

//c: 00000000000000000000000000000001

因此,可以让一个数n&1,然后得到n的二进制的第一位的值(如果结果是1,那n的二进制的第一位也是1,如果是0,那第一位是0),然后让n右移一位n>>1,然后找其第二位。。。。。。然后一直遍历到第32位。

int main()

{

int n = 5;

int i = 0;

int arr[33] = { 0 };//int 是有32位的

//从第一位开始依次取n对应二进制的每一位

for (i = 1; i <=sizeof(int) * 8; i++)

{

arr[i] = n & 1;

n=n >> 1;

}

//printf("%d\n", i);

int k = 0;

//逆序输出

for (k = i-1; k >= 1; k--)

{

printf("%d", arr[k]);

}

printf("\n");

return 0;

}

运算结果:

但是用数组存,有点麻烦,所以我又改进了一下

int main()

{

int n = 5;//0000000101

int i = 0;

int k = 1 << 31;

for (i = 0; i < sizeof(int) * 8; i++)

{

printf("%d", -((n & k) >> 31));

n <<= 1;

}

printf("\n");

return 0;

}

但是我感觉还是有点麻烦,可又想不出更好的方案了。。。。。。

___________________________________________________________

如果您有更好的方法,可以分享给我,我也学习一下。^-^

相关推荐

台湾 节假日 2025
365bet足彩论坛

台湾 节假日 2025

📅 08-14 👁️ 9340
金蝉,聪明人从不炸着吃,学会这样做,好吃又入味,待客倍有面
摄影师工资怎么样(摄影师最低工资多少)
365bet指定开户网址

摄影师工资怎么样(摄影师最低工资多少)

📅 08-28 👁️ 2784