版权声明:本文为博主原创文章,未经博主同意不得转载。 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. js数组方法详解

    Array对象的方法-25个 /*js数组方法详解 */ /* * 1 concat() 用于连接多个数组或者值-------------- * 2 copyWithin() 方法用于从数组的指定位置 ...

  2. mysql 研发规范

    1. 命名    a) 有意义.    b) 数据库.表,都用小写,仅使用下划线和小写字母.    c) 索引以idx_开头.    d) 命名不要过长,尽量少于25个字符.    e) 不要使用保留 ...

  3. jquery 属性选择器

    jquery 属性选择器   第一种根据属性选择E[attr] $("[title]").click().......... 即选择所有元素内 属性带有title的元素即<l ...

  4. git读书笔记以及使用技巧

    [添加文件] git add  把文件修改添加到暂存区    git commit -m '' 把暂存区的所有内容提交到当前分支 [查看历史]    git log 查看提交历史 git log -- ...

  5. HZAU 18——Array C——————【贪心】

    18: Array C Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 586  Solved: 104[Submit][Status][Web Boar ...

  6. vs2012 使用方法汇总

    1)安装Vsiual Assist插件 工具栏-->tools-->Extentsions and Upates-->点击左边的Online然后右边会出现可以安装的插件,找到Visu ...

  7. PCU

    PCU(Peak concurrent users ),互联网术语,应用在网络游戏和其他互联网服务领域,意思是最高同时在线人数 业务系统架构性能提升主要分为两种不同的方式,scale-out(横向扩展 ...

  8. php 不用第三个变量 交换两个变量的值汇总

    //方法一:$a ="abc";$b="def"; $a = $a^$b;$b = $b^$a;$a = $a^$b; //方法二:list($a, $b)= ...

  9. wex5新增数据库

    首先是要打开Wex5   (这是废话,下面进入正题..) 1.第一步,找到界面中的 ”窗口” 点击打开,你会看到一个 “ 首选项 ”按照流程也要打开 (囧),,,,,,,,看图为重 2.当你打开了 “ ...

  10. SpringSecurity 3.2入门(1)框架介绍

    关于Spring Security Spring Security,这是一种基于Spring AOP和Servlet过滤器 [7] 的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法 ...