首页 > 其他分享 >【C语言】输出数据的二进制存储形式

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

时间:2024-10-08 22:51:43浏览次数:9  
标签:存储 ch 二进制 C语言 int 555 printf

        说在前面:是一个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的隐式转换结果,目的达成

标签:存储,ch,二进制,C语言,int,555,printf
From: https://blog.csdn.net/Wtemile/article/details/142771037

相关文章

  • 练习题 - 爬虫数据存储方法
    在数据科学和编程实践中,数据的获取和存储是至关重要的步骤之一。在本文中我们将演示如何从《三国志13》的相关网页中抓取人物基础数据,并将这些数据保存到多种不同的文件格式和数据库中。具体来说我们将使用Python编写脚本,利用requests库获取网页内容,使用BeautifulSoup解析H......
  • C语言——static 关键字与 const 关键字
    static静态的        一、static修饰局部变量——称为静态局部变量                static改变了局部变量的生命周期(本质上是改变了变量的存储类型),当被static修饰时,局部变量由栈区存放到了静态区。voidtest(){intnum=1;printf("%d......
  • 实验2 C语言分支与循环基础应用编程-1
    任务一#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1397#defineN2476#defineN321intmain(){intcnt;intrandom_major,random_no;srand(time(NULL));//以当前系统时间作为随机种子cnt=0;......
  • 初识C语言
    一、C语言的简介什么是C语言C语言之父C语言的由来C语言的发展为什么要学C语言/能做什么为什么要学习这套C语言课程内容介绍1、C语言标准1.1标准简史1972年C语⾔在⻉尔实验室诞⽣.丹尼斯·⾥奇参考B语⾔开发.1970-80年代,C语⾔被⼴泛应⽤,产⽣很多不同的C语⾔版本.程......
  • FTP连接池与多线程上传下载算法实现(C语言)
    FTP连接池与多线程上传下载算法实现(C语言)设计思路伪代码示例C代码示例为了避免多线程环境下FTP连接池在故障重连时导致的竞争条件和coredump问题,我们需要设计一个精细的连接池管理系统,确保在连接重连时,其他线程不会尝试使用该连接。以下是一个简化的设计思路和示......
  • 数据存储分析
    存储分类1.RAM:运行内存,速度快、掉电数据丢失2.ROM:在单片机中就是Flash。ROM原来指一次性编程存储,后来改善为PROM->EPROM->EEPROM改善增强。Flash是在EPROM的基础上改善而来,相对于EEPROM来说,速度较慢,但都是非易失性存储设备。Flash需要进行扇区读写,EEPROM可以支持字......
  • lightdb pllua存储过程实测
    根据对pl/lua的相关介绍和一些说明如http://www.pgsql.tech/project_305_10000096,其性能相比plpgsql和plsql快不少,那实际到底如何呢?下面拿demo和一些实际的来对比下。1、lua安装。从https://www.lua.org/download.html下载最新版。因为pllua需要依赖lua.so动态库,所以不......
  • c语言中的变量存储区域
    栈局部变量和函数参数通常存储在栈中。函数调用时,栈空间用于存储函数参数、返回地址和局部变量。intfunc(constchar*str1,char*str2,intcount){count++;printf("%s%s\n",str1,str2);returncount;}在这个函数中,参数,局部变量都是存储在栈上的,等函数返回......
  • c语言实用小程序
    ASCII编码程序:#include<stdio.h>Intmain(void){charx=?(num);printf(“%c”,x);return0;}解码:charx=’?(字符即字母或标点)’;print(“%d”,x);~//*typesize.c--打印类型大小*/#include<stdio.h>intmain(void){/*C99为类型大小提供%zd转换说明*/pri......
  • c语言模拟实现qsort
    要想模拟首先qsort函数首先我们应该知道这个函数的功能是什么接下来我为大家引入一个列子我们想要实现一组有序数的升序可以通过冒泡排序法思想是 两两相邻元素进行比较 代码如下 通过冒泡排序法 #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>voidbubbl......