一、进制

1> 内存细节

  • 根据数据类型分配相应大小的内存空间
  • 内存空间由高地址向低地址分配
  • 数据一般按照从高位到低位存储

2> 常用的进制格式

  1. 十进制

    ① 由0~9十个数字组成
    ② 逢10进1
    ③ 默认为十进制数
    ④ printf函数的输出格式为%d或%i
    ⑤ 内存中以二进制存储
  2. 二进制

    ① 由0和1两个数字组成
    ② 逢2进1
    ③ 在数字开头加上0b或0B,表示二进制数
    ④ 无法直接输出二进制数,需要进行转换
  3. 八进制

    ① 由0~7八个数字组成
    ② 逢8进1
    ③ 在数字开头加上0,表示八进制数
    ④ printf函数的输出格式为%o
  4. 十六进制

    ① 由0~9,a~f(A~F)十六个字符组成
    ② 逢16进1
    ③ 在数字开头加上0x或0X,表示十六进制数
    ④ printf函数的输出格式%x或%X

3> 进制之间的转换

  1. 二进制与十进制

    ① 二进制转化为十进制,是二进制数各个数位上得数字乘以2的该数
    位所在的位数减1次幂,如:0b11 = 1x(2的1次幂)+ 1x(2
    的0次幂)
    ② 十进制转化为二进制,先将该数转化为2的幂次累加的形式,系
    数就为该十进制数的二进制形式,如11 = 1x(2的3次幂)+ 0x(2
    的2次幂)+1x(2的1次幂)+1x(2的0次幂)
  2. 二进制与八进制

    ① 二进制转化为八进制数,先将二进制数从低位到高位,每三位分为
    一组,每组转化为一位八进制数
    ② 八进制转化为二进制数,将八进制数一位转化为三位二进制
  3. 二进制与十六进制

    ① 二进制转化为十六进制,先将二进制数从低位到高位,每四位分为
    一组,每组转化为一位十六进制数
  4. 八进制、十六进制与十进制

    ① 八进制、十六进制与十进制之间的转化,一般要借助二进制,先
    将八进制、十六进制或十进制转化为二进制,再进行转化

4> 类型说明符

  1. long和short

    ① short修饰的数据占两个字节,short默认表示short int类型,一
    般在进行操作之前,先转化为int类型,printf函数的输出格式为%d
    ② long修饰的数据占八个自己,long默认为long int类型,printf
    函数的输出格式为%ld
  2. signed 和unsigned

    ① unsigned修饰的数据只能表示整数非负整数
    ② signed修饰的数据可以表示整数,默认为signed类型
    ③ unsigned类型表示的非负整数个数时signed表示的二倍

5> n位2进制数的取值范围

  1. signed修饰

    signed修饰的n为二进制数的表示范围为(0~(2的n次幂-1))
  2. unsigned修饰

    unsigned修饰的n为二进制数的表示范围为((-2的n次幂)~
    (2的n次幂-1))

6> 示例

#include <stdio.h>

//定义一个函数将一个整数转化为二进制形式输出
void intToBinary(int number); int main()
{
//short unsigned定义的数据能表示最大的整数
//为2的16次幂-1即65535,此句会发出警告
short unsigned a = 65536; //定义int型变量,并将二进制数13赋值给该变量
int b = 0b1101;
//定义int型变量,并将八进制数13赋值给该变量
int c = 015;
printf("b=%o\n", c);
//定义int型变量,并将十六进制数13赋值给该变量
int d = 0xd;
printf("b=%x\n", c); //将一个整数转化为二进制形式输出
intToBinary(c); return 0;
} //定义一个函数将一个整数转化为二进制形式输出
void intToBinary(int number)
{
//存储number在内存中所占的位数
int count;
//存储每位二进制的数值
int bit; //计算number在内存中所占的位数
count = sizeof(number)*8; for (int i = count; i > 0; )
{
i--;
//通过右移和按位与运算计算number每个二进制位的数值
bit = number>>i & 1;
printf("%d", bit); //每输出四个二进制位,输出一个制表符
if (0 == i % 4)
{
printf("\t");
}
}
}

二、位运算

1> 按位与(&)

  • 全1才为1,否则为0
  • 可以某个二进制位的值

2> 按位或(|)

  • 全0才为0,否则为1

3> 按位异或(~)

  • 相同为0,不同为1
  • 某个数异或自己为0,异或0为自己
  • 异或运算可以交换
  • 异或可以用于交换两个变量的值

4> 按位取反(^)

  • 0变为1,1变为0
  • 按位取反连同符号位一块取反

5> 左移(<<)

  • 低位补0,溢出位舍弃
  • 符号位可能会被舍弃,正负性可能会改变
  • 某个数左移n为等价于该数乘以2的n次幂
  • 左移的效率比乘法高

6> 右移(>>)

  • 负数右移,高位补1,溢出位舍弃
  • 整数右移,高位补0,溢出位舍弃
  • 某个数右移n为等价于该数除以2的n次幂
  • 右移的效率比除法高

7> 示例(该示例使用代码块)

	{
int a = 9;
int b = 8;
//记录移动的位数
int n;
//记录中间变量的值
int temp; /*
用按位与运算判断一个整数的奇偶性,
比较运算符的左值和右值,如果是表达式,尽量用小括号括住
*/
(a & 1) == 1 ?
printf("a为奇数\n"):printf("a为偶数\n"); //按位或
temp = a | b; //用按位异或运算实现交换两个变量的值
a = a ^ b;
b = a ^ b;
a = a ^ b; //按位取反
temp = ~a; //用左移运算符实现乘以2的n次幂运算,这里乘以2的1次幂
n = 1;
temp = a << n; //用左移运算符实现除以2的n次幂运算,这里除以2的2次幂
n = 2;
temp = a >> n;
}

三、char类型

1> 内存细节

  • 占用一个字节大小的内存
  • 在内存中以ASCII码(一个整数)形式存储

2> 使用注意

  • char类型可以存储一定范围的整形数据(0~127)
  • char类型可以进行自动类型提升整型,可以像操作整形数据一样操作char型数据
  • 具有特殊含义的字符用printf函数输出时,要先转化为转义字符
  • 将整数转化为字符,一般用这个整数加上'0',即为这个整数的字符形式

3> 示例

#include <stdio.h>
#include <stdlib.h> //定义一个函数,将一个字符转化为对应的大小写形式
char upperOrLower(char c); int main()
{
//存储一个字符
char c;
//存储字符转换后的形式
char temp; c = 'a';
//将一个字符转化为对应的大小写形式
temp = upperOrLower(c);
} char upperOrLower(char c)
{
//若字符为小写形式,转换为大写形式
if (c >= 'a' && c <= 'z')
{
printf("该字符的小写形式为:%c\n", c - ('a' - 'A'));
return c - ('a' - 'A');
}
//若字符为大写形式,转换为小写形式
else if (c >= 'A' && c <= 'Z')
{
printf("该字符的小写形式为:%c\n", c + ('a' - 'A'));
return c + ('a' - 'A');
}
else
{
printf("输入有误,程序退出!\n");
exit(1);
}
}

C语言-05-内存分析的更多相关文章

  1. c语言的内存分析

    1. 进制 1. 什么是进制 ● 是一种计数的方式,数值的表示形式  汉字:十一   十进制:11  二进制:1011  八进制:13 ● 多种进制:十进制.二进制.八进制.十六进制.也就是说,同一个 ...

  2. C语言-05内存剖析

    1.进制 1. 二进制 1>     特点:只有0和1,逢2进1 2>     书写格式:0b或者0b开头 3>     使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储 ...

  3. Chrome开发者工具之JavaScript内存分析

    阅读目录 对象大小(Object sizes) 对象的占用总内存树 支配对象(Dominators) V8介绍 Chrome 任务管理器 通过DevTools Timeline来定位内存问题 内存回收 ...

  4. [转载]JavaScript内存分析

    https://github.com/CN-Chrome-DevTools/CN-Chrome-DevTools/blob/master/md/Performance-Profiling/javasc ...

  5. Chrome开发者工具之JavaScript内存分析(转)

    尽管JavaScript使用垃圾回收进行自动内存管理,但有效的(effective)内存管理依然很重要.在这篇文章中我们将探讨分析JavaScript web应用中的内存问题.在学习有关特性时请确保尝 ...

  6. C语言内存分析

    C语言内存分析 一.进制 概念:进制是一种计数方式,是数值的表现形式 4种主要的进制: ①. 十进制:0~9 ②. 二进制:0和1 ③. 八进制:0~7 ④. 十六进制:0~9+a b c d e f ...

  7. iOS开发——高级篇——内存分析,Instruments

    一.内存分析 1.静态内存分析(Analyze)不运行程序,直接对代码进行内存分析,查看代码是否有内存泄露优点:分析速度快,并且可以对所有的代码进行内存分析缺点:分析结果不一定准确(没有运行程序,根据 ...

  8. 李洪强-C语言4-内存分析

    C语言内存分析 一.进制 概念:进制是一种计数方式,是数值的表现形式 4种主要的进制: ①. 十进制:0~9 ②. 二进制:0和1 ③. 八进制:0~7 ④. 十六进制:0~9+a b c d e f ...

  9. c语言之内存的申请malloc() 和释放free()

    c语言之内存的申请malloc() 和释放free() 1.如何使用 malloc 函数 malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分配多大内存 ...

  10. JS内存泄漏 和Chrome 内存分析工具简介(摘)

    原文地址:http://web.jobbole.com/88463/ JavaScript 中 4 种常见的内存泄露陷阱   原文:Sebastián Peyrott 译文:伯乐在线专栏作者 - AR ...

随机推荐

  1. 20个精美的免费 PSD 界面设计素材【免费下载】

    在这篇文章中,我们给大家收集了20个最新出炉的 UI 设计素材.这些来自优秀设计师的 PSD 源文件素材让其它的设计师们在设计用户界面原型的时候能够非常便利.些界面素材让他们使用快速和有效的方式完成用 ...

  2. [python]decimal常用操作和需要注意的地方

    decimal模块 简介 decimal意思为十进制,这个模块提供了十进制浮点运算支持. 常用方法 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要 ...

  3. 对于Discuz!NT不允许新用户注册的解决办法

    客户论坛用的是Discuz!NT,但是用户注册总是提示不允许新用户注册,对于这个问题,网上好多说的是管理员登录后台,在"用户与访问控制"里将允许新用户注册改为"是&quo ...

  4. TOGAF:企业信息化复杂吗?

    本文更新版本已挪至:http://www.zhoujingen.cn/blog/2666.html -------------------- 在与人交流TOGAF的时候,离不开企业信息化,而信息化又离 ...

  5. BABOK2主要概要输入输出图

  6. fcitx 无法启动

    困扰了好久的问题,终于解决了. 问题描述: 在fcitx的输入法配置栏里,输入法列表是空的,使用Ctrl+space无法启用任何的输入法, 当然此截图中的是有的,这是问题已经解决后的状态了. 解决方法 ...

  7. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)

    计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...

  8. JS魔法堂:阻止元素被选中

    一.前言 在为IE5.5~9polyfill HTML5新特性placeholder时需要阻止元素被选中,因此在网上.书上查阅相关资料,记录在此以便日后查阅. 二.IE10+实现方式──CSS3 .u ...

  9. <!DOCTYPE> 的理解

    [[ from <!DOCTYPE> 标签的深入理解 ]] 前言: 今天被问道“有没有仔细了解过<!DOCTYPE>标签?”,愣了一下,因为一开始在W3cschool上看到过建 ...

  10. jQuery实现星星评分功能

    一.这是我做的调查问卷中的一个功能.(第三方MVC框架) 二.功能说明:1.用户点击星星,将值放到隐藏域中.2.用户可以重新点击星星修改回答. 前台JS代码: <script type=&quo ...