嵌入式开发学习——标识符,常量以及进制的转换(c语言)

目录

 输入数据赋值给变量

标识符

1.标识符的命名规范

1.强制规范

2.建议规范

2.关键字

常量

1.什么是常量

2.常量的分类

3.常量的定义

使用#define定义常量

使用const定义常量

4.#define和const的区别

进制

常见的进制

1.c语言中使用不同进制表示整数

2.输出格式

3.进制的转换

原码、反码、补码


输入数据赋值给变量

  scanf主要用于从标准输入(通常是键盘)读取数据并将其存储到指定的变量中(变量需要提前声明),同printf一样,位于头文件 <stdio.h> 中。

示例代码

#include <stdio.h>
int main()
{
  // 声明一个int类型的变量,取名为a
  int a;
  // 使用输出语句输出提示信息:请您输入一个数字
  printf("请您输入一个数字\n");
  // 使用输入语句,从标准输入中读取用户输入的数据,并存储到a变量中
  scanf("%d", &a);                       // 需在变量名前面使用&取地址符号,这样才可以读取用户输入的数据
  printf("您刚刚输入的数据是:%d \n", a); // 使用输出语句输出变量a的数据

  // 声明3个int类型的变量,取名为b,c,d
  int b, c, d;
  // 使用输出语句提示用户用户输入三个数字,并使用空格分开
  printf("请您输入三个数字,每个数字使用空格隔开\n");
  // 使用输入语句,从标准输入读取3个整数,并分别存储到b,c,d三个变量中,注意,每个变量前要使用&取地址符
  scanf("%d %d %d", &b, &c, &d);
  // 使用输出语句,打印出三个变量的值
  printf("您输入的三个数字分别是:%d,%d,%d \n", b, c, d);

  // 声明两个int类型的变量e,f
  int e, f;
  // 使用输出语句提示用户输入两个数字,并使用逗号隔开
  printf("请输入两个数字,并使用'逗号'分隔 \n");
  // 使用输入语句,从标准输入中读取两个整数,并分别存储到e,f变量中,注意,每个变量前使用&取地址
  scanf("%d,%d", &e, &f);
  // 使用输出语句,输出两个变量的值
  printf("您输入的数字分别是:%d,%d \n", e, f);
  return 0;
}

输出结果

请您输入一个数字
10
您刚刚输入的数据是:10 
请您输入三个数字,每个数字使用空格隔开
20 30 40
您输入的三个数字分别是:20,30,40 
请输入两个数字,并使用'逗号'分隔 
50,60
您输入的数字分别是:50,60 

        需要注意的是,scanf中,变量名前面需要添加 & 符号,该符号称为取地址符。

        与printf相同,scanf也可以通过不同格式占位符为不同类型的变量获取值。

        注意:占位符中间如果是空格,那么输入的多个内容需要使用空格 隔开

        如果占位符中间使用的是逗号,那么输入的多个内容需要使用逗号 隔开

标识符

1.标识符的命名规范

1.强制规范
  1. 只能由小写或大写英文字母,0-9 或 _ 组成。
  2. 不能以数字开头。
  3. 不可以是关键字。
  4. 标识符具有长度限制,不同编译器和平台会有所不同,一般限制在63个字符内。
  5. 严格区分大小写字母。比如:Hello、hello是不同的标识符。
2.建议规范
  1. 为了提高阅读性,使用有意义的单词,见名知意,如:sum,name,max,year等。
  2. 使用下划线连接多个单词组成的标识符,如:max_classes_per_student。
  3. 多个单词组成的标识符,除了使用下划线连接,也可以使用小驼峰命名法,除第一个单词外,后续单词的首字母大写,如 myVariableName、maxClassesPerStudent。
  4. 不要出现仅靠大小写区分不同的标识符,如:name、Name容易混淆。
  5. 系统内部使用了一些下划线开头的标识符,比如,C99标准添加的类型 `_Bool`,为防止冲突,建议开发者尽量避免使用下划线开头的标识符。

2.关键字

        关键字是一些具有特殊含义的保留单词。

        ANSI C有32个关键字。

类型

具体关键字

控制语句关键字(12 个)

break, case, continue, default, do, else, for, goto, if, return, switch, while

数据类型关键字(12 个)

char, enum, double, long, float, int, short, signed, struct, unsigned, union, void

存储类型关键字(4 个)

auto, extern, register, static

其他关键字(4 个)

const, sizeof, typedef, volatile

常量

1.什么是常量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量

常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

常量可以直接在代码中使用,也可以通过定义常量来使用。

程序运行时,其值不能改变的量,即为常量

2.常量的分类

       字面量常量,直接使用的常量,不需要定义或声明,包括整数常量、浮点数常量、字符常量、枚举常量等。

        标识符常量,使用标识符作为常量名,包括 #define 定义的标识符常量和const 关键字定义的标识符常量以及枚举常量。

3.常量的定义

在 C 中,有两种简单的定义常量的方式:

  a. 使用 #define 预处理器: #define 可以在程序中定义一个常量,它在编译时会被替换为其对应的值。

  b. 使用 const 关键字:const 关键字用于声明一个只读变量,即该变量的值不能在程序运行时修改。

使用#define定义常量

        #define 来定义常量,也叫作宏定义,就是用一个标识符来表示一个常量值,如果在后面的代码中出现了该标识符,那么编译时就全部替换成指定的常量值,即用宏体替换所有宏名,简称宏替换

#define 定义常量的格式

#define 常量名 常量值

下面的代码定义了一个名为 PI 的常量:

#define PI 3.14159

注意:

       1. 不要以分号结尾,如有分号,分号会成为常量值的一部分。

       2. #define 写在 main 函数的外面

使用const定义常量

        跟使用 #define定义宏常量相比,const定义的常量有详细的数据类型,而且会在编译阶段进行安全检查,在运行时才完成替换,所以会更加安全和方便。

const 定义常量的格式

const 数据类型 常量名 = 常量值;

下面的代码定义了一个名为MAX_VALUE的常量:

const int num = 100;

4.#define和const的区别

        #define 与 const 这两种方式都可以用来定义常量,选择哪种方式取决于具体的需求和编程习惯。通常情况下,建议使用 const 关键字来定义常量,因为它具有类型检查和作用域的优势,而 #define 仅进行简单的文本替换,可能会导致一些意外的问题。

(1)执行时机:#define是预处理指令,在编译之前执行;const是关键字,在编译过程中执行。

(2)类型检查:#define定义常量不用指定类型,不进行类型检查,只是简单地文本替换;const定义常量需指定数据类型,会进行类型检查,类型安全性更强。

进制

常见的进制
  1. 二进制:0、1,满2进1。
  2. 十进制:0 - 9,满10进1。
  3. 十六进制:0 - 9及A-F,满16进1。十六进制中,除了 0 到 9 十个数字外,还引入了字母,以便表示超过9的值。字母A对应十进制的10,字母B对应十进制的11,字母 C、D、E、F 分别对应十进制的 12、13、14、15。

1.c语言中使用不同进制表示整数

  1. 二进制:以0b或0B开头表示。
  2. 十进制:正常数字表示。
  3. 十六进制:以0x或0X开头表示,此处的A-F不区分大小写。

代码示例:

#include <stdio.h>
int main()
{
  int a = 0b1010; // 二进制形式
  int b = 012;    // 八进制形式
  int c = 101;    // 十进制形式
  int d = 0x2f;   // 十六进制形式
  printf("%d\n", a);
  printf("%d\n", b);
  printf("%d\n", c);
  printf("%d\n", d);
  return 0;
}

2.输出格式

不同的进制只是整数的书写方法不同,不会对整数的实际存储方式产生影响。不同进制可以混合使用,比如 10 + 015 + 0x20 是一个合法的表达式。

使用格式占位符可以将整数以不同进制形式输出,相关的格式占位符如下:

        %d :十进制整数。

        %x :十六进制整数。

        %#x :显示前缀 0x 的十六进制整数。

        %#X :显示前缀 0X 的十六进制整数。

代码示例:

#include <stdio.h>
int main()
{
  // 定义一个int类型的变量num,并存储一个十进制的数据100
  int num = 100;
  printf("十进制形式:%d\n", num);           // 输出整数的十进制形式
  printf("十六进制形式:%x\n", num);         // 输出整数的十六进制形式
  printf("十六进制的0x小写形式:%#x\n", num); // 输出整数的十六进制小写形式
  printf("十六进制的0X大写形式:%#X\n", num); // 输出整数的十六进制大写形式
  return 0;
}

3.进制的转换

              二进制转换成十进制

规则:从最低位开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。

        

        十进制转换成二进制

规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。

        

        十六进制转换成十进制

规则:从最低位开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

​​​​​​​        十进制转换成十六进制

规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。

​​​​​​​​​​​​​​      ​​​​​​​​​​​​​​   二进制转换成十六进制

规则:低位开始,将二进制数每四位一组,转成对应的十六进制数即可。

​​​​​​​​​​​​​​        十六进制转换成二进制

规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。

原码、反码、补码

        一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机 用一个数的最高位存放符号, 正数为0, 负数为1.

        总结:一个数字的二进制就是机器数

        因为机器数带有符号位,也就是第一位是符号位,所以机器数的形式值就不等于真正的数值(真值)。为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

原码

原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值。

  • 正数的原码:就是它对应的二进制数。
  • 负数的原码:它的绝对值对应的二进制数,且最左边位变为1。
  • 0的原码:仍然是0。

反码

  • 正数的反码:和原码相同。
  • 负数的反码:在其原码的基础上,符号位不变,其余各位取反。
  • 0的反码:仍然是0。

补码

  • 正数的补码:和原码、反码相同。
  • 负数的补码:反码的基础上加1。
  • 0的补码:仍然是0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值