版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/u010518429/article/details/30332237

// enter any type data to show Binary.c
// 输入指定类型数据显示其二进制值
// version: 6.0
// 缺陷: 请勿使用vc 6.0编译 由于不支持long long及unsigned long long类型 #define _CRT_SECURE_NO_WARNINGS // Microsoft Visual Studio 2013编译器请加入本行
#include <stdio.h>
#include <limits.h> // CHAR_BIT所属h文件 CHAR_BIT = 8
#define MAX 13 // 最大选项数
#define EATLINE while (getchar() != '\n') continue // 应输入数字但实际输入字母则剔除错误输入
#define SHOW_INPUT(str) printf("Please input a %s number ", str) // 显示请输入语句
#define SHOW_ERROR(str) printf("wrong %s number!\n", str) // 显示输入错误语句 const char * const datatype[MAX + 1] =
{
"exit",
"char",
"unsigned char",
"short",
"unsigned short",
"int",
"unsigned int",
"long",
"unsigned long",
"long long",
"unsigned long long",
"float",
"double",
"long double"
}; int menu(void);
void convert(const unsigned char * const ch, const char size); int main(void)
{
union
{
long long llvalue;
unsigned long long ullvalue;
float fvalue;
double dvalue;
long double ldvalue;
// 用unsigned类型是为了与mask类型一致
unsigned char array[CHAR_BIT];
}data; int select; // 选项 // while ((select = menu()) != 0)
while (select = menu())
{
switch (select)
{
case 1: // char
SHOW_INPUT(datatype[select]);
printf("(%d to %d) : ", CHAR_MIN, CHAR_MAX);
while (scanf("%lld", &data.llvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(%d to %d) : ", CHAR_MIN, CHAR_MAX);
}
printf("\n%lld is in %#p\nBinary : ", data.llvalue, &data.llvalue);
convert(data.array, sizeof(char));
break; case 2: // unsigned char
SHOW_INPUT(datatype[select]);
printf("(0 to %u) : ", UCHAR_MAX);
while (scanf("%llu", &data.ullvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(0 to %u) : ", UCHAR_MAX);
}
printf("\n%llu is in %#p\nBinary : ", data.ullvalue, &data.ullvalue);
convert(data.array, sizeof(unsigned char));
break; case 3: // short
SHOW_INPUT(datatype[select]);
printf("(%d to %d) : ", SHRT_MIN, SHRT_MAX);
while (scanf("%lld", &data.llvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(%d to %d) : ", SHRT_MIN, SHRT_MAX);
}
printf("\n%lld is in %#p\nBinary : ", data.llvalue, &data.llvalue);
convert(data.array, sizeof(short));
break; case 4: // unsigned short
SHOW_INPUT(datatype[select]);
printf("(0 to %u) : ", USHRT_MAX);
while (scanf("%llu", &data.ullvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(0 to %u) : ", USHRT_MAX);
}
printf("\n%llu is in %#p\nBinary : ", data.ullvalue, &data.ullvalue);
convert(data.array, sizeof(unsigned short));
break; case 5: // int
SHOW_INPUT(datatype[select]);
printf("(%d to %d) : ", INT_MIN, INT_MAX);
while (scanf("%lld", &data.llvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(%d to %d) : ", INT_MIN, INT_MAX);
}
printf("\n%lld is in %#p\nBinary : ", data.llvalue, &data.llvalue);
convert(data.array, sizeof(int));
break; case 6: // unsigned int
SHOW_INPUT(datatype[select]);
printf("(0 to %u) : ", UINT_MAX);
while (scanf("%llu", &data.ullvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(0 to %u) : ", UINT_MAX);
}
printf("\n%llu is in %#p\nBinary : ", data.ullvalue, &data.ullvalue);
convert(data.array, sizeof(unsigned int));
break; case 7: // long
SHOW_INPUT(datatype[select]);
printf("(%d to %d) : ", LONG_MIN, LONG_MAX);
while (scanf("%llu", &data.ullvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(%d to %d) : ", LONG_MIN, LONG_MAX);
}
printf("\n%llu is in %#p\nBinary : ", data.ullvalue, &data.ullvalue);
convert(data.array, sizeof(long));
break; case 8: // unsigned long
SHOW_INPUT(datatype[select]);
printf("(0 to %u) : ", ULONG_MAX);
while (scanf("%llu", &data.ullvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(0 to %u) : ", ULONG_MAX);
}
printf("\n%llu is in %#p\nBinary : ", data.ullvalue, &data.ullvalue);
convert(data.array, sizeof(unsigned long));
break; case 9: // long long
SHOW_INPUT(datatype[select]);
printf("(%lld to %lld) : ", LLONG_MIN, LLONG_MAX);
while (scanf("%lld", &data.llvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(%lld to %lld) : ", LLONG_MIN, LLONG_MAX);
}
printf("\n%lld is in %#p\nBinary : ", data.llvalue, &data.llvalue);
convert(data.array, sizeof(long long));
break; case 10: // unsigned long long
SHOW_INPUT(datatype[select]);
printf("(0 to %llu) : ", ULLONG_MAX);
while (scanf("%llu", &data.ullvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
printf("(0 to %llu) : ", ULLONG_MAX);
}
printf("\n%llu is in %#p\nBinary : ", data.ullvalue, &data.ullvalue);
convert(data.array, sizeof(unsigned long long));
break; case 11: // float
SHOW_INPUT(datatype[select]);
printf(": ");
while (scanf("%f", &data.fvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
}
printf("\n%f is in %#p\nBinary : ", data.fvalue, &data.fvalue);
convert(data.array, sizeof(float));
break; case 12: // double
SHOW_INPUT(datatype[select]);
printf(": ");
while (scanf("%lf", &data.dvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
}
printf("\n%lf is in %#p\nBinary : ", data.dvalue, &data.dvalue);
convert(data.array, sizeof(double));
break; case 13: // long double
SHOW_INPUT(datatype[select]);
printf(": ");
while (scanf("%lf", &data.ldvalue) != 1)
{
EATLINE;
SHOW_ERROR(datatype[select]);
SHOW_INPUT(datatype[select]);
}
printf("\n%lf is in %#p\nBinary : ", data.ldvalue, &data.ldvalue);
convert(data.array, sizeof(long double));
break; default:
break;
}
}
printf("Bye.\n");
getch();
return 0;
} int menu(void)
{
int i, code, status; for(i = 0; i <= MAX; ++i)
printf("%d\t%s\n",i , datatype[i]); printf("Please input the number to select : ");
while ((status = scanf("%d", &code)) != 1 || (code > MAX || code < 0))
{
if (status != 1)
scanf("%*s");
printf("input an integer from 0 to %d,please\n", MAX);
}
return code;
} void convert(const unsigned char * const ch, const char size)
{
char i;
for (i = size - 1; i >= 0; --i)
{
// 掩码mask用unsigned类型是为了无符号数右移以0填充
   unsigned char j, mask = 1 << (CHAR_BIT - 1); // 0x80 即 1000 0000B
for (j = 0; j < CHAR_BIT; ++j)
{
(ch[i] & mask) == mask ? putchar('1') : putchar('0');
// mask = mask >> 1;
mask >>= 1; // 右移1位
// 每输出8位2进制就空一格
if (j % CHAR_BIT == CHAR_BIT -1)
putchar(' ');
}
} printf("\n\n"); for (i = 0; i < size; ++i)
{
printf("%#p : \t", ch + i);
unsigned char j, mask = 1 << (CHAR_BIT - 1); // 0x80 即 1000 0000B
for (j = 0; j < CHAR_BIT; ++j)
{
(ch[i] & mask) == mask ? putchar('1') : putchar('0');
// mask = mask >> 1;
mask >>= 1; // 右移1位
// 每输出8位2进制就空一格
if (j % CHAR_BIT == CHAR_BIT - 1)
putchar(' ');
}
putchar('\n');
}
putchar('\n');
}

论C/C++数据在内存中的二进制存放形式的更多相关文章

  1. C/C++数据在内存中的存储方式

    目录 1 内存地址 2 内存空间   在学习C/C++编程语言时,免不了和内存打交道,在计算机中,我们存储有电影,文档,音乐等数据,这些数据在内存中是以什么形式存储的呢?下面做一下简单介绍. 本文是学 ...

  2. 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理

    使用程序获取整型数据和浮点型数据在内存中的表示. C++中整型(int).短整型(short int).单精度浮点数(float).双精度浮点数(double)在内存中所占字节数不同,因此取值范围也不 ...

  3. 数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)

    https://www.cnblogs.com/renyuan/archive/2013/05/26/3099766.html 1.故事的起源 “endian”这个词出自<格列佛游记>.小 ...

  4. LITTLE-ENDIAN(小字节序、低字节序) BOM——Byte Order Mark 字节序标记 数据在内存中的存放顺序

    总结: 1. endian 字节存放次序 字节序,顾名思义字节的顺序,再多说两句就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了). 2. LITTLE-ENDIA ...

  5. Redis为什么要把所有数据放到内存中?

    Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘.所以Redis具有快速和数据持久化的特性. 如果不将数据放到内存中,磁盘的I/O速度会严重影响redis的性能.在内 ...

  6. SpringMvc 系统启动时加载数据到内存中

    SpringMvc 系统启动时加载数据到内存中 学习了:http://blog.csdn.net/newstruts/article/details/18668269 https://www.cnbl ...

  7. Java的各类型数据在内存中分配情况详解

    1.      有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构.说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚,但 ...

  8. C语言之数据在内存中的存储

    C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...

  9. 为什么redis 需要把所有数据放到内存中?

    答:Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数 据写入磁盘.所以 redis 具有快速和数据持久化的特征.如果不将数据放在内存中, 磁盘 I/O 速度为严重影响 red ...

随机推荐

  1. DbUtils(二) 结果集实例

    单行数据处理:ScalarHandler    ArrayHandler    MapHandler    BeanHandler 多行数据处理:BeanListHandler    Abstract ...

  2. windows 系统C盘暴增

    系统: Windows Server 2012R2 问题: C盘200G的空间,暴增剩余3G.但是查看仅有69G的空间占用. 根源:Windows的虚拟文件,驱动器分页. 解决方案: 我的电脑-> ...

  3. 「bzoj1003」「ZJOI2006」物流运输 最短路+区间dp

    「bzoj1003」「ZJOI2006」物流运输---------------------------------------------------------------------------- ...

  4. Navicat Premium Mac 12 破解(CV别人的,但是亲测能用)

    第一步:这部分暂时存到文本编辑器中 公钥: -----BEGIN PUBLIC KEY-----MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQB8vXG0ImYh ...

  5. django学习笔记——搭建博客网站

    1. 配置环境,创建django工程 虚拟环境下建立Django工程,即创建一个包含python脚本文件和django配置文件的目录或者文件夹,其中manage.py是django的工程管理助手.(可 ...

  6. 如何在vue && webpack 项目中的单文件组件中引入css

    引入方式很简单,就是在script下使用require()即可. 因为import 是import...from 的形式,所以是不需要的. <script> import {mapStat ...

  7. [转]批处理for命令使用指南

    摘要:本文由浅入深,为大家专门讲解for的用法,希望大家喜欢. 首先应该明确的是,for不是一个简单的命令,它的用法比较复杂,它还可以带四个参数(/L /D /R /F),其中:/L和/F参数是最经常 ...

  8. 使用awstat分析Nginx的访问日志

    在我的上一篇文章<使用 Nginx 提升网站访问速度>中介绍了 Nginx 这个 HTTP 服务器以及如何通过它来加速网站的访问速度.在实际的网站运营中,我们经常需要了解到网站的访问情况, ...

  9. 九度oj题目1521:二叉树的镜像

    题目1521:二叉树的镜像 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2061 解决:560 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF ...

  10. pat00-自测4. Have Fun with Numbers (20)

    00-自测4. Have Fun with Numbers (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yu ...