【C语言】C编程教程一:简介及进制

一、编程语言的概念

1、计算机之父冯诺依曼提出计算机的理论:计算机应该采用二进制(因为电子元件具有双稳态特性,双稳态指的是0和1 —>数据是存储在内存 中–>内存由存储单元组成–>存储单元由触发器组成–>触发器由门电路组成–>与门、或门、非门)。

2、C语言的标准是由美国国家标准协会(ANSI)进行制定,当时的C语言也被称为ANSI C ,后期由ISO(国际标准化)组织重新进行发布,目前为止,一共发布了3套关于C语言的标准(C89/C90、C99、C11、C18)。

3、ASCLL表:常见:0 ---- 48 A ----- 65 a ---- 97
在这里插入图片描述
4、C语言是一门面向过程的编程语言,面向过程是一种编程思想,面向过程指的是把一个大的问题拆分为多个小问题,然后把每个小问题单独的进行解决,从而达到解决大问题的目的。可以理解为“大事化小,小事化了”。面向过程的设计思想采用的是“自顶向下”的设计原则,指的是程序从上到下顺序执行的。C语言标准中规定了程序是从main函数开始顺序执行的。

5、main函数的返回值

  • 如果是int类型,则返回值会作为exit函数的参数,传递给exit函数,exit函数的功能是终止程序,其实exit函数是一个记录程序退出状态的函数,当exit的参数是0或者是EXIT_SUCCESS,则表示程序是正常退出的,如果exit函数的参数是EXIT_FAILURE,则表示程序是异常退出的。注意:系统会自动调用exit函数来记录程序的运行状态,当然用户也可以手动调用该函数。

6、函数调用

  • C语言程序的基本单位是函数,因为C语言采用的面向过程的设计思想,需要把大问题拆为小问题,每个小问题都通过特定的代码段来解决,每个代码段就可以封装为一个函数。
  • 一个程序是由一个主函数和若干个子函数组成的,主函数是固定的,就是main函数,主函数作为程序的入口,子函数是不固定的,一般子函数的类型有两种:库函数 and 自定义函数。

7、<>和" "的区别(笔试题)

#include <stdio.h> //使用<>包含头文件,编译器在查找头文件的时候默认从系统路径下找
#include “stdio.h” //使用””包含头文件,编译器在查找头文件的时候默认从当前路径下查找,
//如果没找到再去系统路径下找,如果还没找到则报错

8、C语言标准中常用的关键字有32个,Linux系统下shell命令都必须借助终端进行输入,终端的启动方式:图标or快捷键(ctrl+alt+t)

9、内存概念

  • 这里涉及到计算机的组成原理,冯诺依曼架构的计算机是由五个部分组成,分别是运算器、控制器、存储器、输入设备、输出设备。
  • 计算机工作的流程:用户通过输入设备把数据写入到存储器中,然后控制器会根据存储器地址读取地址下的数据,然后控制器把数据传递给运算器,运算器对数据进行运算,然后把运算结果传递给控制器,控制器再把数据写回到存储器中,然后再利用输出设备反馈给用户。
  • 输入设备 -> 存储器 -> 控制器 -> 运算器 -> 控制器 -> 存储器 -> 输出设备
  • 计算机中的程序都是运行在内存中,而内存分为两种:只读存储器ROM or 随机存储器RAM,只读存储器是断电以后数据不会丢失;随机存储器是掉电数据会丢失。

10、在32位系统内存大小:4G = 4 * 1024 * 1024 *1024 * 8 = 2^32 --> 0x0000_0000 ~ 0xFFFF_FFFF。计算机处理数据的基本单位是字节,而

  • 1 byte = 8 bit
  • 1 KB= 1024 * 8 bit
  • 1 MB = 1024 * 1024 * 8 bit
  • 1GB = 1024 * 1024 * 1024 * 8 bit

11、命名规则

  • 变量和常量也被称为标识符,对于标识符的命名必须遵循规则:标识符是由字母、数字、下划线组成,并且标识符的第一个字符只能是字母或者下划线。

12、一般32位系统的数据总线和地址总线都是32位,也就是CPU每次寻址的时候是以4字节为单位
在这里插入图片描述
13、 如果一个变量没有明确的使用unsigned来进行修饰,则系统会默认变量是有符号的。前导符(前缀),规定八进制的前缀以0表示,比如064,规定十六进制的前缀以0x/0X表示

二、进制之间的关系

1、二进制

  • 二进制由 0 和 1 两个数字组成,使用时必须以0b或0B(不区分大小写)开头

2、八进制

  • 八进制由 0~7 八个数字组成,使用时必须以0开头(注意是数字 0,不是字母 o)

3、十六进制

  • 十六进制由数字 0~9、字母 A~F 或 a~f( 不区分大小写 A == 10 B11 C12 D13 E14 F==15)组成,使用时必须以0x或0X(不区分大小写)开头

4、十进制转二进制

  • 方法为:十进制数除2取余法。(转八进制时为除8取余法;转十六进制时除16取余)
    在这里插入图片描述

5、其他进制转换
向十进制转时,将各位数按权展开,从右向左依次拿每位上的数乘以二(八 / 十六)的 0 1 2 ……次方,然后相加的和即是相应的十进制数。
独特二进制转化方法:权位值
2048 1024 512 256 128 64 32 16 8 4 2 1

独特转化方法:将对应的二进制权位值进行相加即可得对应的十进制数
1 1 0 1 0 1 化成十进制:32+16+4+1 = 53

6、二进制转八进制
方法为:每3位二进制数按权展开,然后相加得到1位八进制数。(注意事项,每3位二进制转成八进制是从右到左开始转换,不足时补0)。
在这里插入图片描述
7、八进制转二进制
方法为:将八进制数的每一位通过除2取余法得到一个二进制数,这个二进制数必须是3位,如果不够3 位,则最左补0。
在这里插入图片描述
8、二进制转十六进制
与二进制转八进制相似,每四位按权相加得到一个数,从最右开始,最后若不足4位则向最左边补0,然后得到十六进制数。
在这里插入图片描述
9、 十六进制转二进制
方法为:将十六进制数的每一位通过除2取余法,得到二进制数,每一位十六进制数得到的二进制数都应该是4位,不足时在最左边补零。
在这里插入图片描述
10、二进制数、八进制数和十六进制数的输出
C语言中常用的整数有 short、int 和 long 三种类型,通过 printf 函数,可以将它们以八进制、十进制和十六进制的形式输出。不能使用 printf 函数输出二进制。在格式控制符中加上#即可输出前缀,例如 %#x、%#o、%#lX、%#ho

11、整数在内存中的存储
1) 原码

  • 将一个整数转换成二进制形式,就是其原码。例如short a = 6;,a 的原码就是0000 0000 0000 0110;更改 a 的值a = -18;,此时 a 的原码就是1000 0000 0001 0010。
  • 正数与负数的原码区别在于符号位(二进制最高位表示,0:正数,1:负数)

2) 反码

  • 对于正数,它的反码就是其原码(原码和反码相同);负数的反码是将原码中除符号位以外的所有位(数值位)取反,也就是 0 变成 1,1 变成 0。a 的值a = -18;,此时 a 的反码是1111 1111 1110 1101

3) 补码

  • 对于正数,它的补码就是其原码(原码、反码、补码都相同);负数的补码是其反码加 1。a 的值a = -18;,此时 a 的补码是1111 1111 1110 1110 = 1111 1111 1110 1101(负数反码)+ 1。
  • 在计算机内存中,整数一律采用补码的形式来存储。这意味着,当读取整数时还要采用逆向的转换,也就是将补码转换为原码。将补码转换为原码也很简单:先减去 1,再将数值位取反即可。

4)数据存储方式:大端存储和小端存储

  • 大端存储:Big -Endian 高位数据存储在内存的低位
  • 小端存储:Little-Endian 低位数据存储在内存的低位
    在这里插入图片描述
    12、整数取值及整数溢出
  • 在现代操作系统中,short、int、long 的长度分别是 2、4、4 或者 8,它们只能存储有限的数值,当数值过大或者过小时,超出的部分会被直接截掉,数值就不能正确存储了,我们将这种现象称为溢出(Overflow)
  • unsigned char 类型的取值范围是 0~255。
  • signed char 类型的取值范围是 -128~+127。
  • 有符号数以补码的形式存储,计算取值范围也要从补码入手。我们以 char 类型为例,从下表中找出它的取值范围:
    在这里插入图片描述
    在这里插入图片描述
  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值