Q:
Implementieren Sie den Algorithmus zur binären Ausgabe einer ganzen Zahl (int).
- Gebe "Geben Sie bitte eine Dezimalzahl ein: " aus.
- Lese eine ganze Zahl vom Benutzer in die Variable "d" (für "dezimal") ein.
- Gebe "Die zugehoerige Binaerzahl lautet: " aus.
- FÜR JEDE Bit-Position i = 31 ... 0 der Variablen "d":
- Verschiebe das Bitmuster der Variablen "d" um i Stellen nach rechts, ohne das Ergebnis in d abzuspeichern,
- ver-UND-e das Ergebnis bitweise mit der Bitkombination 0x00000001 und
- gebe das Ergebnis (0 oder 1) als Dezimalzahl (ohne Zeilenumbruch) aus.
- Gebe einen Zeilenumbruch aus.
要求以二进制形式输出整数变量(int)
以十进制的形式输入
以二进制形式输出
A:
#include<stdio.h>
int main()
{
int z,i;
printf("Geben Sie bitte eine Dezimalzahl ein: Die zugehoerige Binaerzahl lautet: ");
scanf("%i",&z);
for(i = 0 ; i<= 31 ; i++)
{
printf("%i", (z >> (31-i)) & 1);
}
printf("\n");
}
· int 型有32字节,从0到31。
·因为数字在计算机中就是以二进制的形式存储的,那我们也可以通过 位运算符 & 来表示出一个数的二进制。
按位与运算符(&)
定义:参加运算的两个数据,按二进制位进行“与”运算。
运算规则:
0&0=0 0&1=0 1&0=0 1&1=1
总结:两位同时为1,结果才为1,否则结果为0。
例如:3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得1。
注意:负数按补码形式参加按位与运算。
· 9&5 可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码)=00000001 (1的二进制补码) 等同于 9&5=1。
因为1的对应存储的二进制码除了最低位,其他位都是0,所以,n&1要么为1(n为奇数时,n的最低位为1),要么为0(n为偶数时,n的最低位为0)。
因此,可以让一个数n&1,然后得到n的二进制的第一位的值(如果结果是1,那n的二进制的第一位也是1,如果是0,那第一位是0 ),然后让n右移一位n>>1,然后找其第二位...然后一直遍历到第32位。从第一位开始依次取n对应二进制的每一位。
关于%d和%i的区别
-
i - integer (指定整数)
-
d - decimal (指定十进制数)
-
都是整型格式
在 printf 格式串中使用时,没有区别
在 scanf 格式串中使用时,有点区别,如下:
——在scanf格式中,%d 只与十进制形式的整数相匹配。
——而%i 则可以匹配八进制、十进制、十六进制表示的整数。·
——例如: 如果输入的数字有前缀 0(018、025),%i将会把它当作八进制数来处理,如果有前缀0x (0x54),它将以十六进制来处理。
————————————————
引用:
版权声明:本文为CSDN博主「阿尔法豆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51142042/article/details/112687999
版权声明:本文为CSDN博主「默认许可人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a982644903/article/details/100183530