C语言内存分析

一、进制

概念:进制是一种计数方式,是数值的表现形式

4种主要的进制:

①. 十进制:0~9

②. 二进制:0和1

③. 八进制:0~7

④. 十六进制:0~9+a b c d e f

C语言在默认的情况下为十进制。

Int num=1010;//十进制

Int num=0b1100;//二进制,以0b或者是0B开头

Int num=014;//八进制,以0开头

Int num=0x4;//十六进制,以0x开头

占位符:

%d和%i    :一十进制整数的形式输出一个值

%o :以不带符号的八进制输出

%x :以不带符号的十六进制输出

%u :以不带符号的十进制输出

%c : 输出字符

%p : 输出地址

%f : 输出小数

%s : 输出字符串

N位二进制的取值范围:

2位···0~3   0~2的2次方-1

3位···0~7   0~2的3次方-1

N位···   0~2的n次方-1

判断以下数据是否正确:

0x7h4 0986 .089 0b325 10e8.7 96f -.003

类型的取值:

在64位编译器下,int类型 占4个字节 共4x8=32bit char类型 占1个字节 共1x8=8bit ,在内存中以字节为单位进行存储。

二、内存分析

注意:内存寻址,由大到小。

Int a=1;

Int b=2;

三、类型说明符

Short== Short int %d 2

Long ==long int %ld 8

Long long ==Long long int  %lld 8

Signed ==Signed int==int %d 4(有符号)

Unsigned ==Unsigned int %u 4(无符号)

Signed和unsigned的区别在于最高位要不要拿来作为符号位,显然后者的取值范围更大。这两个说明符可和long等说明符组合使用,但不会改变字节数。Unsigned代表int类型的最高位,不必用来作为符号位。

四、位运算

(一)按位与 &

功能:只有对应的两个二进制位均为1时,结果才为1,否则为0。

示例:9&5 的结果为1

1001

0101

——

0001

说明:如果位与上1则保留原值,与上0则为0。

应用:查询0101 0111 0000的倒数第六位是0还是1,则可以与上数值以判断,得出的结果是什么,那么它的原值就是什么。

0101 0111 0000

0000 0010 0000

0000 0010 0000

(二)按位或 |

功能:只要对应的两个二进制位有一个为1则结果为1,否则为0。

举例:9|5的结果为13

1001

0101

——

1101

(三)按位异或 ^

功能:当对应的两个二进制位不相等时,结果为1,否则为0。

举例:9^5的结果为:12

1001

0101

——

1100

规律:

①. 相同整数异或的结果为0,如5^5=0

②. 顺序可以交换。如9^5^9=9^9^5=0^5=5

③. 任何数值跟0进行异或,结果还是原来的数值。9^0=9

④. a^b^a==b

(四)按位取反 ~

举例:~9的结果为-10

0000 0000  0000  0000 0000  0000  0000  1001

1111 1111 1111  1111  1111  1111 1111 0110

(五)左移 <<

如a<<n

把整数a的二进制位全部左移n位,高位丢弃,低位补零。左移n位的结果其实是乘以2的n次方,由于符号位会被丢弃,所以结果可能会改变正负性。

举例:9<<1的结果为18

0000 1001

0010 0010

应用:如果某个数需要乘以2的n次方,那么使用位运算效率更高。

(六)右移 >>

如a>>n

把整数a的二进制位全部右移n位,低位丢弃,符号位不变,一般情况下高位用符号位补齐。右移的结果实际上是除以2的n次方。

(七)练习

(1)使用位运算交换两个变量的值

 

(2)使用位&运算符判断变量的奇偶性

(3)编写一个函数,输出整数的二进制格式

五、char类型

(一)基础

Char c=‘A’;

字符在内存中也是也二进制的格式存储的。

Int num=6;//在内存中以00···0110存储

Char num=‘6’;//对应的ascii码值是54=32+16+4+2,在内存中为11 0110

两者之间有着本质的区别,一个是具体的整数值,一个是字符,以ASCII格式存储。

(二)使用注意

单引号只能括住单字节的字符,ASCII中的所有字符都是单字节的。

Char c=’男’;//错误,因为一个汉字占据3个字节的存储空间

Char c=”A”;//错误,这是字符串,为‘A’+‘\0’。

Char c=65;//正确,另一种形式而已

Char类型占据一个字节,所以它的取值范围为-128~127。

帮助:输出一个\,使用\\,输出一个单引号使用\’,输出一个双引号,使用\"。

练习:编写一个函数,将小写字母转换为大写。

李洪强-C语言4-内存分析的更多相关文章

  1. 李洪强 - C语言8-Scanf函数

    C语言的scanf函数 一.变量的内存分析 (一)字节与地址 ①. 内存以字节为单位 每个字节都有自己的内存地址,根据地址就可以找到该字节.整个内存相当于一整个酒店,而酒店以房间为单位,在这里每个房间 ...

  2. 李洪强-C语言1-指针

    C语言指针 前导程序   一.基本知识点 Int a=10; Int *p;//定义一个int类型的指针 P=&a;//指针变量p指向了变量a *p=20;//使用指针不通过变量直接修改变量a ...

  3. 李洪强-C语言9-C语言的数据,变量和常量

    一.数据 图片文字等都是数据,在计算机中以0和1存储. (一)分类 数据分为静态数据和动态数据. ①. 静态数据:一些永久性的的数据,一般存储在硬盘中,只要硬盘没坏数据都是存在的.一般以文件的形式存储 ...

  4. 李洪强-C语言2-字符串

      C语言字符串 一.字符串基础 注意:字符串一定以\0结尾. Printf(“yang\n”); 其中yang为字符串常量,“yang”=‘y’+‘a’+‘n’+‘g’+‘\0’.字符串由很多的字符 ...

  5. 李洪强-C语言7-C语言运算符

    C语言运算符 一.算术运算 C语言一共有34种运算符,包括常见的加减乘除运算. ①. 加法:+ 还可以表示正号 ②. 减法:- 还可以表示负号 ③. 乘法:* 非数学意义上的X ④. 除法:/  注意 ...

  6. 李洪强-C语言关键字、标识符和注释

    一.关键字 C语言提供的有特殊含义的符号,共32个. 在Xcode中关键字全部高亮显示,关键字全部都为小写.如return.int等. 二.标识符 定义:标识符是程序员在程序中自定义的一些符号和名称. ...

  7. 李洪强-C语言6-控制结构

    C语言流程控制 一.流程控制结构 (1)顺序结构:按书写顺序执行每一条语句. (2)选择结构:对给定的条件进行判断,根据判断结果决定执行哪一段代码. (3)循环结构:在给定条件成立的情况下,反复执行某 ...

  8. 李洪强-C语言5-函数

    C语言函数 一.函数 C语言程序是由函数构成的,每个函数负责完成一部分的功能,函数将工恩呢该封装起来,以供程序调用. 二.函数定义 目的:将一些常用的功能封装起来,以供日后调用. 步骤:确定函数名,确 ...

  9. 李洪强-C语言3-数组

    一.数组的概念 用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. 二.数组的定义 格式: 类型 数组名[元素个数]: 举例:存 ...

随机推荐

  1. maven3 junit4 spring3 jdk8 :junit一直报错,害的我几个星期都是这个错,你妹的!

    [org.springframework.test.context.junit4.SpringJUnit4ClassRunner]SpringJUnit4ClassRunner constructor ...

  2. Android数据存储之SQLite的操作

    Android作为一个应用在移动设备上的操作系统,自然也就少不了数据的存储.然而SQLite作为一个轻型的关系型数据库,基于其轻量.跨平台.多语言接口及安全性等诸多因数考虑,因而Android较大的数 ...

  3. Servlet过滤器和监听器

    1,Servlet过滤器 <filter> <filter-name>charset</filter-name> <filter-class>org.g ...

  4. VS2010中“工具>选项中的VC++目录编辑功能已被否决”解决方法

    转自:http://blog.csdn.net/chaijunkun/article/details/6658923 这是VS2010的改变,不能够在“工具-选项”中看到“VC++目录”了. 但是呢, ...

  5. 引水入城(codevs 1066)

    题目描述 Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政 区划十分特殊,刚好构成一个N行M列的矩形,如上图所示,其中每个格子都代表一座城 市,每座 ...

  6. nginx打开目录浏览

    server { listen 80; server_name localhost; index index.html index.htm index.php; autoindex on; #开启ng ...

  7. sql server 本地复制订阅 实现数据库服务器 读写分离

    再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 ...

  8. Android ADT 下载 ( ADT-23.0.7 )

    https://dl.google.com/android/ADT-23.0.7.ziphttps://dl.google.com/android/ADT-23.0.6.zip ADT百度云下载链接( ...

  9. vagrant,流浪汉,我又来啦。

    最近学个DEVOPS2.0,讲微服务,容器华,持续部署,很到位,就一个一个工具撸一撸... vagrant,以前接触过,所以上手快,,哈哈,,用时再具体配置. virtualbox的. 基本命令: # ...

  10. hdu 4024 二分

    转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2653003.html   一种是直接根据公式计算的,另外一种是二分算出来的.两种方法速度 ...