嵌入式初学-C语言-二

进制转换

我们目前接触到的进制有 二进制、八进制、十进制、十六进制

其他进制 转 十进制:

按权相加

  1. (1234)10 = 4 * 10的0次方 + 3 * 10的1次方+2 * 10的2次方+ 1 * 10的3次方

  2. (0x1234)16 = 4 * 160次方+ 3 * 16的1次方+ 2 * 16的2次方+1 * 16的3次方

1:十进制 转 其他进制:

辗转相除法:将需要转换的数据不停的除以转换的进制数,直到商为0 1.

十进制转二进制:

2:十进制转八进制

八进制转十六进制:

借助于二进制,将八进制转换为二进制,再将二进制转换为十六进制

十六进制转八进制:

借助十进制,将十六进制转换为十进制,再将十进制转换为八进制

有符号数和无符号数:

在c语言中,整数是可以带符号的(有符号signed)或不带符号的(无符号,unsigned)。这两种类型的证书在内存中以二进制形式表示。并使用不同的模式

有符号数(signed numbers)

有符号数是来表示正数,负数,0的整数类型。在内存中有符号数使用最高位(通常是符号位)来表示正负。如果他的最高位为0,表示这个数是正数或者0,如果最高位为1,表示这个数是负数,其余为表示数值本身。

举例:例如一个8位有符号整数可以表示的范围是-128~127,这是因为一位用于表示符号(正或负),剩下的7位

注意:有符号位是默认的,在c语言中,基本整数类型int,short,long默认为有符号数,除非明确指定为无符号数

举例:

cs 复制代码
signed int num = 12; // 标准有符号位写法
int num == 12; // 默认省略signed关键字

无符号位(unsugned numbers)

无符号数是只能表示非负整数的数据类型。在内存中无符号数不使用符号位,所有位都用于表示数值。因为,无符号数范围比有符号数的范围大。

注意:在c语言中,通过关键字添加unsignet,来指定无符号类型,如unsigned int;unsigned short..

举例:例如一个8位的无符号整数可以表示的范围是0~255.这是因为所有的8位都用来表示数值了,没有符号位。

cs 复制代码
 unsigned int num = 12; // 标准无符号位写法

变量

概念

表面:程序运行过程中取值可以改变的数据

实质:变量其实代表了一块内存区域/单元/空间。变量名可视为该区域的标识。 整个变量分为三部分:

变量名:这个只是变量的一个标识,我们借助变量名来存取数据。

变量空间/内存单元:这个就是内存中分配的一块用来存储数据的空间/区域。

数据/变量值:这个就是存放在变量空间中的数据

注意:我们把数据存放间变量名对应空间的过程称之为变量的赋值操作。

语法:

cs 复制代码
[修饰符] 数据类型 变量列表;

命名规范

  1. 变量名可以由数字、字母(区分大小写)、下划线 _ 、$组成,不能以数字开头。

  2. 不建议使用中文,也不建议使用拼音。

  3. 变量名不能与系统中已有的标识符重名。(比如关键字、保留字...,举例:int,signed,if,break...)

案例

cs 复制代码
// 方式1:先声明,后赋值,注意:赋值操作顺序:从右往左
int num1;
num1 = 21; // 赋值操作,顺序,从右往左,这个句代码的意思是:将21赋值给num1(num1对应的内存单元)
printf("%d",num1);// 将num1对应的数据输出到控制台,需要指明输出数据的格式:int 使用 占位符%d表示
// 方式2:声明并赋初值
int num2 = 21; // 这句代码执行的时候做了两件事:① 向内存申请了一块存储单元(分配内存),② 将21赋值给
num2对应的存储单元
printf("%d",num2);
// 方式2:覆盖初始值
int num3 = 21;
num3 = 22;
printf("%d",num3);
// 方式3:变量列表。逗号在C语言中可以作为分隔符和运算符使用
int x = 12, y = 13;

说明:

  1. 变量定义是,利用同一个类型标识符可同时定义多个变量,各个变量之间使用 , (英文逗号)分 割。

  2. 定义变量后,如果未对变量进行初值的赋予,则变量所代表的内存空间中的数据是随机安排的。

  3. 可以在变量定义的同时给变量赋值,这个操作称为变量的初始化,C语言允许对变量进行初始化。

  4. 初始化变量是,尽量做到类型相同,例子: long l = 567L

  5. 整型数据在内存中的存放方式:

按照补码方法存放:

正整数的补码就是将该数据转换为二进制格式。

负整数的补码就是将该数据的绝对值转换为二进制格式,按位取反,并+1。

  1. 浮点型数据在内存中的存放方式

采用指数方式存放:

|------------------|---------|---------|--------------|
| 类型 | 符号位 | 指数位 | 尾数部分(小数) |
| float(四个字节) | 1 | 8 | 23 |
| double(8个字节) | 1 | 11 | 52 |
| | | | |

例子:

需求:将27.5以float类型存放

解析:

-27.5的二进制为11011.1,指数表示法:1.10111*24

-指数:4,加上127,就是131 二进制:1000 0011

-尾数(小数点后的数)10111,补够23位 1011 1000 0000 0000 0000 000

-用二进制表示就是 (符号数位1位)0 (指数位8位)1000 0011 (尾数位23位)1011 1000 0000 0000 0000 000

-所以单精度浮点型数据27.5在内存中存储方式如下

0 1000 0011 1011 1000 0000 0000 0000 0000

注意:浮点型数据在内存中存放的是一个近似值

7.字符数据在内存中的存放方式:

以ASCII码存放 A+32=a(97) B+32=b(98)

字符的存在分为两种形式,ASCII码(编号,从0开始的正整数)和ASCII码值(数据,包括英文字母 大小写、数字、特殊符号)

注意:ASCII码是可以和整数进行数学运算的。

举例:

cs 复制代码
// 写法一
char c1 = 'A';
// 写法二
char c2 = 60;
相关推荐
环能jvav大师几秒前
基于R语言的统计分析基础:使用SQL语句操作数据集
开发语言·数据库·sql·数据分析·r语言·sqlite
吱吱鼠叔4 分钟前
MATLAB方程求解:1.线性方程组
开发语言·matlab·php
菜鸟求带飞_4 分钟前
算法打卡:第十一章 图论part01
java·数据结构·算法
浅念同学5 分钟前
算法.图论-建图/拓扑排序及其拓展
算法·图论
小安运维日记5 分钟前
Linux云计算 |【第三阶段】PROJECT1-DAY1
linux·运维·云计算·apache
Antonio9159 分钟前
【CMake】使用CMake在Visual Studio内构建多文件夹工程
开发语言·c++·visual studio
是小Y啦22 分钟前
leetcode 106.从中序与后续遍历序列构造二叉树
数据结构·算法·leetcode
LyaJpunov22 分钟前
C++中move和forword的区别
开发语言·c++
pyliumy23 分钟前
rsync 全网备份
linux·运维·服务器
程序猿练习生27 分钟前
C++速通LeetCode中等第9题-合并区间
开发语言·c++·leetcode