【TUM-EI-Programmieren】 206 h) - Binäre Ausgabe Festkommazahl 二进制输出定点数

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值