一、C语言基础[运行原理、数据类型、格式化输出、进制转换、优先级、运算符号]

一.c语言执行流程

1.1 源文件

内容:程序员书写源代码

1.2 目标文件

内容:

  1. 编译器:源代码转换到目标文件中代码(此时没有绑定任何库)
  2. 链接器:为目标文件中代码绑定上库

注意:
3. 此过程如果写的代码有错误就会报错
4. 后缀可能为.obj

1.3 可执行文件

内容:最后能成功在目标机器上执行

二.基础

基础标准库函数:

  1. printf(“%d”,a) 区别:同python不同,不能直接计算,需要格式化输出才能计算

  2. scanf(“%d”,&a)
    2.1 区别:同python不同,里面不能写格式化输出提示内容。多个变量写法:scnaf("%d %d",&a,&b)需要两个%d之间加上空格;scnaf("%d,%d",&a,&b)写的时候需要安装a:b的格式写;scnaf("%d,,%*c,%d",&a,&b) %*c表示省掉中间那个字符
    2.2 scanf有返回值判断用户输入是否合法
    2.3 scanf(一般是针对有%c类型时)时,不能取消空格写如scanf("%d%d%f%c",&a,&b,&c,&d);
    2.4 scanf()会把空格识别为’\0’,会导致strlen错误

  3. gets(str) 获取一个字符串输入

  4. puts(str)输出一个字符串,并且自动换行

三.数据类型

原理:举例short a在64位系统中,由于64位系统有一次计算内容有64字长,故写入二进制前48位都是0,后16位根据写入a的值写入1或者0

基础:不同操作系统和编译器取值不同,32位系统的‘位’也叫‘字长’,一字长=八字节(32字长同一时间内处理字长为32位的二进制数据)

函数:

  1. typeof(int) 可以查看在当前编译器环境下,字节数

1.整型

原理:根据无符号型和有符号型区分,有符号的需要留一位控制符号,没有的则不需要。数字大小完全是存入的二进制数值计算得出的

实例含义
short a短整型
int a整型
long a长整型
long long a长长整型
unsigned int a无符号整型
unsigned long a无符号长整型
unsigned long long a无符号长长整型
类型16位平台32位平台64位平台
short2个字节2个字节(范围-32768~32767)2个字节
unsigned short2个字节2个字节(范围0~65534)[%u输出]2个字节
int2个字节4个字节(范围-21亿~21亿)4个字节
unsigned int2个字节4个字节(范围0~42亿)[%u输出]4个字节
long4个字节4个字节4个字节
long long8个字节8个字节8个字节

2.浮点型

A:
原理:浮点数在内存中其实是按照IEEE 754(IEEE二进制浮点数算术标准)来存储的,先转换模型,如浮点数a-> a = (-1)^S * M * 2^E(看下图).

其中S如果浮点数为正即0,反之即1,

对于 E,根据其×M=十进制的浮点数,推算出其的值,然后根据,double 和 float 两种类型不同,在此标准中,E 的 类型为 unsigned int 无符号整数类型,但是科学计数法中,指数位可以为负数,所以标准规定 E 存入内存中必须加上一个中间值
float:E 为 8 位,取值范围为 0 ~ 255,中间值 127
· · · · · 例:2^10 中 E = 10;保存为 float 类型时,内存中存入的是 10 + 127 = 137 = 10001001
double:E 为 11 位,取值范围为 0 ~ 2047,中间值 1023
· · · · · 例:2^10 中 E = 10,保存为 double 类型时,存入的是 10 + 1023 = 1033 = 10000001001

对于 M,先计算把数转换为二进制然后保留一位整数例(2.5->10.1->1.01),只需要存入 M 的小数位,即 若 M = 1.10101,则只需要存入10101

举例
例如十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2 。那么,s=1,M=1.01,E=2+127=129
按float保存后:1 10000001 01000000000000000000000
在这里插入图片描述
B:
特点:默认保留6位小数

实例含义
float单精度实例
double双精度实例
long double长精度实例

3.char型

原理:c语言char类型都是用ASCLL来转换表示计算,也就是数字来计算

注意:需要用单引号

实例含义
char范围-128-127或者0-255(靠编译器的默认)
signed char范围-128-127
unsigned char范围0-255
类型16位平台32位平台64位平台
char1个字节1个字节1个字节

4.字符串型

原理:由多个char组成
定义:char a[20]表示定义一个字符串长度为20(特别说明:字符串scanf无需‘&’符号)
在这里插入图片描述
函数:

  1. strlen(a) 可以查看a字符串的长度

四.格式化输出

输出原理:实例int a;printf("%hd",a);在读取存入的的a时因为%hd表示short int所以它只会读取a存入内存二进制的后16位,设a=2300000但是输出为6240是因为%hd只读取了后16位

4.1格式化表

4.1.1 语法

实例含义
%5d数值长度为5不足补空格,长度足够什么也不补充
%-10s补充空格往右侧补充
%.5f保留五位小数
%05f长度不够全补充0

4.1.2 分类

实例含义
%s输出字符串
实例含义
%c输出单个字符
实例含义
%ffloat类型
%lfdouble类型
%efloat类型和double类型的指数计算浮点数
%a16进制浮点数
实例含义
%d整型
%ld长整型
%lld长长整型
%hd短整型
实例含义
%u无符号整型
%lu无符号长整型
%llu无符号长长整型
%hu无符号长长整型
实例含义
%o整型八进制
%lo长整型八进制
%llo长长整型八进制
%so短整型八进制
实例含义
%x整型十六进制
%lx长整型十六进制
%llx长长整型十六进制
%hx短整型十六进制

五.进制转换

其它进制转十进制表示

  1. int a;a=010其中a为八进制,输出的内容为十进制(8);int a;a=0xc其中a为十六进制,输出的内容为十进制(6)
  2. '\56' '\x56'分别表示八进制56和十六进制56

十进制转其它进制:使用格式化输出(上面)

5.1进制转换

5.1.1任意进制转十进制

注意范围:16进制0-9+a-f(即0-15);8进制0-7.
方法: (数码×权值)然后累加
举例:值(8或16)为57;值1010(二进制)

  1. 16转10->7×16的0次方+5×16的1次方 = 7+80=87
  2. 8转10->7×8的0次方 + 5×8的一次方 = 7+40=47
  3. 2转10->0×2的0次方+1×2的1次方+0×2的2次方+1×2的3次方=0+2+0+8=10

5.1.2 十进制转其它进制

方法:如2进制:每项依次除以二,把余数依次从右先左写出来
举例:值为64

  1. 转为8进制-> 64÷8余0,8÷8余0,1÷8余1
  2. 转换为16进制->64÷16余0,4÷16余4
  3. 转换为2进制->64÷2余0,32÷2余0,16÷2余0,8÷2余0,4÷2余0,2÷2余0,1÷2余1 = 1000000

5.1.3 十进制小数转二进制

方法:规则把小数部分×2-取出整数部分,然后再取出小数部分×2-取出整数部分,依次持续下去,直到值为小数0或形成循环小数则停止(从左到右列出)
举例:

  1. 值0.25-> 0.25×2=0.5 二进制第一位0;0.5×2=1.0;二进制第二位为1;同时结束
  2. 值0.8-> 0.8×2=1.6 二进制第一位1;0.6×2=1.2 二进制第二位为1;0.2×2=0.4 二进制第三位为0;0.4×2=0.8 二进制第四位为0;0.8×2=1.6 二进制第五位为1;来到循环结束

六.优先级

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

举例:

  1. 结合性
int a,b,c,d;
a = 5;
a=b=c=d;
printf("%d\n%d\n%d\n%d",a,b,c,d);
输出结果一定不是四个五,因为赋值运算符优先级从右向左计算结合
该为 d=5;
就能打印出四个5
  1. 优先级
int a,b;
a = 2;
b = a + ++a;
printf("%d",b);
结果不是5
结果是6
因为++a优先级高,等到a+ 时a已经是3

七.运算符号

内容解释
%取余(效果任何数%x的范围都是0-x)a%b的范围0-b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值