嵌入式初学-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;
相关推荐
F_D_Z7 分钟前
【解决办法】pip install albumentations安装下载遇19kB/s超级慢细水管
linux·运维·python·pip
luoqice8 分钟前
在嵌入式 Linux 系统中,配置 DNS 以实现内网或外网连接
linux·运维·服务器
青草地溪水旁25 分钟前
Ubuntu上开通Samba网络共享
linux·运维·ubuntu·samba
妙妙屋(zy)30 分钟前
基于Astro开发的Fuwari静态博客模版配置CICD流程
服务器·docker
2zcode37 分钟前
基于Matlab图像处理的静态雨滴去除与质量评估系统
开发语言·图像处理·matlab
IvanCodes41 分钟前
三、Linux用户与权限管理详解
linux·运维·服务器
默默敲代码的徐哥儿43 分钟前
八股文整理——计算机网络
服务器·网络·计算机网络
IvanCodes1 小时前
四、Linux核心工具:Vim, 文件链接与SSH
linux·ssh·vim
吃着火锅x唱着歌1 小时前
LeetCode 1616.分割两个字符串得到回文串
算法·leetcode·职场和发展
胎粉仔1 小时前
Objective-c 初阶——异常处理(try-catch)
开发语言·ios·objective-c