【C语言】输出数据的二进制存储形式

        说在前面:是一个C语言新手,很新的新手,在这个专栏记录一些探索过程

        今天学习中学到类型转换,将int和short类型赋值给char类型变量时,因为想要清楚看到隐式转换的结果,产生了写一个东西来输出数据在计算机中的二进制存储形式的想法,以下为尝试过程

一、首先想到的是利用上次尝试写的”使用位运算符输出十进制数的二进制表示“,写一个函数,如下:

使用C语言位运算符将十进制转换为二进制-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Wtemile/article/details/142748408?spm=1001.2014.3001.5501

//定义一个转二进制函数
void binary(int n)
{
    int y;
    y=n>>31&1;
    if(y==1)                //对负值进行处理
    {
        printf("-");
        n=-n;               //负值以补码形式存储,不便于直接移位得到二进制数
    }
    int i,m=0;
    for(i=30;m==0;i--)      //去掉前面大串多余的0    相较于10.7优化:直接使用i来控制循环
    {
        m=n>>i&1;
    }
    for(i=i+1;i>=0;i--) printf("%d",n>>i&1);
    n=-n;
    printf("\n");      //换行

}

使用该函数展示隐式转换结果:

//隐式类型转换:将整形赋值给字符型
int main()
{
    char ch = 555;          
    printf("%c\n",ch);
    printf("%d\n",ch);
    binary(ch);      //101011
    binary(555);    //1000101011
    //只将整形的后八位存储到了浮点型中,其余部分舍弃

    return 0;
}

可以看到使用这种方法是可以表示出来整形555和字符ch是不同的,但并不能表示出完整的二进制存储格式,仍然不够直观

二:考虑使用sizeof得到数据所占内存,进而用相似方式得到二进制存储格式

但是由于函数的参数要求确定数据类型,而我们此处的对象数据类型是不确定的,所以不再使用函数

三:于是简单的学习了一下宏变量,并考虑用宏变量实现目的,如下:

#define STORAGE(n){\
    int a=sizeof(n);\
    for(a=8*a-1;a>=0;a--){\
        int b=n>>a&1;\
        printf("%d",b);\
    }\
    printf("\n");\
}\

接下来再使用该宏名输出二进制存储格式:

//隐式类型转换:将整形赋值给字符型
int main()
{
    char ch = 555;          
    printf("%c\n",ch);
    printf("%d\n",ch);
    binary(ch);      //101011
    binary(555);    //1000101011
    STORAGE(ch);     //00101011
    STORAGE(555);    //00000000000000000000001000101011
    //只将整形的后八位存储到了浮点型中,其余部分舍弃

    return 0;
}

可以看到此时的输出结果即为数据的二进制存储格式,可以清楚的看出将int赋值给char的隐式转换结果,目的达成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值