C语言基础1

C.1计算机数据表示和进制转换

送入计算机的数字,字母,符号等信息必须转换成0、1组合的数据形式才能被计算机接受、存储并进行运算
能够进行算术运算得到明确数值概念的信息称为计算机数值数据,其余的信息称为非数值数据

C.1.1数值数据的表示

数值数据的计数方式是进位制,凡是按照进制方式计数的数制叫做进位计数值,简称进位制,用有限的数码表示。(在初高中学习的数学全部是以十进制的形式进行运算,n进制就代表逢n进一)。

常见的进制有:十进制、二进制、八进制、十六进制

C.1.1.1十进制:DEC

例如:123
123是由1个100,2个10,3个1构成,可以表示为:123 = 100+20+3。
也可表示为:123 = 1*10^2 + 2*10^1 + 3*10^0

C.1.1.2二进制:BIN

二进制是逢二进一,只有0和1两种数码,英文缩写位BIN(二进制数的前缀为:0b)

【例】给到一个二进制数据:0b1001 1110

内存的基本单位:字节Byte
内存的最小单位:位 Bit
1字节(Byte) = 8位(Bit)
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024 GB

(1)如何把二进制转换成十进制:

0b 1010 = 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 8 +0 + 2 + 0 = 10

0b 1111 =1*2^3 + 1*2^2 +1*2^1 + 1*2^0 = 8 + 4 + 2 + 1 =15

可以借助 8 4 2 1 来计算

(2)如何把十进制转换成二进制:

a.短除法

除以2取余数(最后一个式子得到的商要为0),把余数逆序排列。

例如:

100 / 2 = 50 ......0
50   / 2 = 25 ......0
25   / 2 = 12 ......1
12   / 2 = 6   ......0
6     / 2 = 3   ......0
3     / 2 = 1   ......1
1     / 2 = 0   ......1

得二进制: 0b 0110 0100(该二进制数以一个字节为单位,第一个0是凑齐8位补齐的)

b.拆分法:

【例】 74 = 64(2^6) + 8(2^3) + 2(2^1) = 0b 0100 1010

步骤:寻找与该数最近的2的n次方的值,一步步进行拆分,最终将次方数写道二进制数对应的位置。

c.计算器:

练习1:把十进制200和66转换成二进制,把0b0011110转换成十进制。(答案见最后)

C.1.1.3八进制:OCT

八进制是逢八进一,0 1 2 3 4 5 6 7作为数码,英文缩写是OCT。(前缀:0)与python不同的是,python中的八进制表示的前缀是0o

(1)如何把八进制转换成十进制:

0177 = 1*8^2 + 7*8^1 + 7*8^0 = 64 + 56 + 7=127

十进制转换成八进制也可以用短除法但是比较麻烦,所以可以借助二进制来转换。

(2)如何把二进制转换成八进制

每三位二进制代表一位八进制,因为8=2^3

【例】
二进制:0b 111
八进制:07

+1之后得:
二进制:0b 1000
八进制:0 10

练习2:0b 010 001 010 转换成八进制

(3)如何把八进制转换成二进制:

每一位八进制代表三位二进制,从低位也就是右边开始转换,如果不满三位则左边补零。
比如: 062 ==> 0b 110 010

练习3: 04561转换成二进制

C.1.1.4 十六进制: HEX

逢十六进一,0 1 2 3 4 5 6 7 8 9 a b c d e f作为数码。英文缩写HEX。(前缀:0x/0X)

(1)如何把十六进制转换成十进制:

0x4a = 4*16^1 + 10*16^0 = 64+10 =74

(2)如何把二进制转换成十六进制:

每四位二进制代表一位十六进制,因为16=2^4

【例】
二进制:0b 1111
十六进制:0x F

+1之后得:
二进制:0b 10000
十六进制: 0x 10

练习4:0b 1011 1010 1111(转成十六进制)

(3)如何把十六进制转换成二进制:

每一位十六进制代表四位二进制,从低位也就是右边开始转换,如果不满四位则左边补零。
例如:0xA5E2 ==> 0b 1010 0101 1110 0010

练习5: 二进制0b01111110转换成八进制,十进制和十六进制数。

十进制1000对应的二进制、八进制和十六进制数。

C.1.2非数值数据表示

概念:
计算机中数据的概念是广义的,机内除有前面提到的数值数据之外,还有文字、符号、图像、语言和逻辑信息等等,因为它们也都是以0、1形式存在,所以成为非数值数据。

C.1.2.1*字符数据

字符数据主要指数字、字母、通用符号、控制符号等等,用单引号' '表示,在机器内都被变换成计算机能够识别的二进制编码形式。国际上被普遍采用的一种编码是美国国家信息交换标准代码,简称为ASCII。英文全称:American Standard Code for Information Interchange。

可以用man ascii查阅,q是退出man手册。

man手册可以查看函数、命令等。

(1)"0"、'0'、0和'\0'的区别

"0"

字符串0

'0'

字符0,对应ASCII码值为48

0

数字0

'\0'

空字符,对应ASCII码值为0

(2)常用字符

'\0' 0 空字符,字符串结束的标志。
'\n' 10 换行
' ' 32 空格
'0' 48 字符0
'9' 57 字符9
'A' 65 大写字母A
'Z' 90 大写字母Z
'a' 97 小写字母a
'z' 122 小写字母z

(3)转换

字符转换成数字:

'0' - 48 = 0 或者'0' - '0' = 0
'1' - 48 = 1 或者'1' - '0' = 1

大写字母和小写字母相互转换:

大写字母 + 32 = 小写字母
小写字母 -  32 = 大写字母

C.2词法符号

词法符号若干字符组成的有意义的最小语法单位。按照词法符号在程序中的作用,可以分为:关键字、标识符、运算符、分隔符和标点符号。

C.2.1关键字

是由系统预定义的词法符号,有特定的含义,不允许用户重新定义。下面是一些基本的关键字:

(1)存储类型(4个):auto(自动型) static(静态) extern(外部引用) register(寄存器)
(2)数据类型(12个):char(字符型) short(短整型) int(整型) long(长整型) float(浮点型) double(双精度浮点型) unsigned(无符号) signed(有符号) struct(结构体) union(共用体) enum(枚举) void(空类型)
(3)控制语句(12个):if else while do for switch case default break continue goto return
(4)其他(4个):sizeof(计算数据所占空间大小) const(常量化) typedef(重定义) volatile(防止被编译器优化)

C.2.2 标识符

由程序员按照命名规则自定义的词法符号,用于宏定义名、变量名、函数名和自定义类型名等。

C语言的命名规则如下:

(1)标识符由一个或多个字母、数字和下划线组成
(2)标识符的第一个字符必须是字母或下划线
(3)标识符不能与任何关键字相同
注意:大小写敏感,命名有一定含义,便于记忆,增加可读性。

练习6: x   y   _A7b_3x   3’a   x*y   @   b.8   while   sum a100(找出符合命名规则的标识符)

C.2.3 运算符

运算符就是表示运算的词法符号,C语言有丰富的运算符,按功能可以划分为:算术运算符、逻辑运算符、关系运算符、位运算符、赋值运算符、其他运算符

1.算术运算符:+ - * / % ++ --
2.逻辑运算符:&& || !
3.关系运算符:< <= > >= == !=
4.位运算符:& | ~ ^ << >>
5.赋值运算符:= += -= *= /= %= &= |= ^= <<= >>=
6.其他运算符: 逗号运算符、三目运算符、sizeof()

C.2.4 分隔符

是用来分隔其他的词法符号,主要包括: 空格符、制表符、换行符号、注释。
通过对分隔符的恰当运用,使得代码的外观格式更为清晰易读,还可以帮助分析程序中的语法错误。

C.2.5 标点符号

C语言中的标点符号有逗号、分号、冒号、花括号、圆括号。标点符号的作用与分隔符相似,但用法非常严格,有着明确的语法规定。有些标点符号出现在表达式中时,当作运算符使用。

C.3变量和基本数据类型

概念:
变量就是在程序中发生变化的量,变量是有类型的,变量的类型就是数据类型。
变量的类型决定了变量存储占用空间的大小,以及如何解释存储的位模式。
1字节(Byte) = 8位(Bit)

C.3.1 定义格式

存储类型 数据类型 变量名;

【例】(auto) int a; //定义了一个数据类型为整型名字叫a的变量

存储类型:变量存储位置。
数据类型包含:名称 字节 取值范围
char short int long float double signed unsigned

类型名称

类型中文名称

存储大小

取值范围

char

字符类型

1

-2^7 到 (2^7-1)

unsigned char

无符号字符类型

1

0 到 2^8 -1

int

整数类型

4 字节

-2^31 到 (2^31-1)

unsigned int

无符号整数类型

4 字节

0 到 (2^32-1)

short

短整型

2 字节

-2^15 到 (2^15-1)

unsigned short

无符号短整

2 字节

0 到 (2^16-1)

long

长整型

4 字节

-2^31 到 (2^31-1)

unsigned long

无符号长整

4 字节

0 到 (2^32-1)

float

单精度浮点型

4字节

有效数据6-7位

double

双精度浮点型

8字节

有效数据15-16位

64位操作系统:long类型是8字节

C.3.2 初始化格式

1.可以定义时初始化
int a = 0;

2.也可以先定义后初始化
int  a;
a = 0;

C.3.3局部变量和全局变量

局部变量: 定义在函数内部的变量。
全局变量:定义在函数外部的变量。

1.生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
2.作用域:变量可以起作用的范围。
3.内存大致分为五个区域:

局部变量、全局变量的区别?

局部变量

全局变量

定义位置

函数内部

函数外部

生命周期

同函数共存亡

同程序共存亡

作用域

作用于当前函数

作用于整个程序

存储位置

栈区

全局区

初值

未初始化,值为随机值

未初始化,值为0

【例】可以看出未初始化的全局变量是0,为初始化的局部变量是随机数。
(随着解释器版本的更替,现如今大部分版本的解释器对于局部变量未初始化时也会赋予初值0)

练习

1.在Linux系统上,如果局部变量没有初始化,默认变量的值是 ________

答案: 随机值

2.全局变量与局部变量是否可以重名?为什么?

答案:可以,因为存储空间不同。

3.一个32位的机器,一个 char 代表的范围是?一个 int 代表的范围是?

答案:

char: -2^7 ~ 2^7-1
int: -2^31 ~ 2^31-1

C.4.常量

概念:
常量是在程序运行中不会发生变化的量,存在常量区。

C.4.1 字符型常量

类型为char,可以从ascii表中查找,不可以改变,用单引号括起来表示。例'A'、'\0'、'\n'、'1'等。

类型

存储大小

值范围

char

字符类型

1 字节

-128 到 127

unsigned char

无符号字符类型

1 字节

0 到 255

signed char

带符号字符类型

1 字节

-128 到 127

原码、反码和补码:

  1. 最高位表示符号位,整数是0,负数是1。
  2. 正数原码、反码和补码都是一样。
  3. 负数要用补码来计算:
  • 原码就是在数值前面直接加符号表示
  • 反码等于原码的符号位不变其余位按位取反
  • 补码等于反码加一

例如:-5
原码: 1000 0101
反码: 1111 1010
补码: 1111 1011
由补码求原码:

(-1得反码==> 1111 1010 符号位不变其余按位取反得原码==>1000 0101)

(符号位不变其余按位取反==> 1000 0100 再+1得原码 ==> 1000 0101(-5))

用''括起来就是字符常量:
'a' 字符a
'\0' 空字符
' ' 字符空格
'\n' 换行

【例】

\转义符后面数字代表转换成八进制对应字符后面数字八进制\x后面数字代表转换成十六进制对应字符后面的数字十六进制

C.4.2字符串常量

""括起来表示就是字符串系统自动末尾添加'\0'作为字符串结尾标志不需要程序员自己添加

"hello"包含: 'h'、'e''l' 'l' 'o''\0'

C.4.3整型常量

整型就是类型为整数的常量,包括从负数到零到正数的所有整数。可以用二进制、八进制、十进制和十六进制表示。

C.4.4 浮点型常量

浮点型常量就是类型为浮点数的常量,包括从负数到零到正整数所有的浮点数。

float double

C.4.5 指数常量

用科学计数法表示

2000=2*10^3 ==> 2e3
0.000002 = 2*10^-6 ==> 2e-6

C.4.6 标识常量(宏定义)

宏定义:起标识作用

  1. 只是单纯进行文本原样替换,在预处理的时候进行。
  2. 遵循标识符命名规则
  3. 一般大写表示

格式: #define 宏名 常量或者表达式或者代码片段

特点: 只是单纯文本替换,不要进行手动运算(先原样替换,替换完再计算。)

如果一个代码串长于一行,可以在行尾用反斜线"\"续行

天才预设的下一篇跳转路径:C语言基础2-CSDN博客

练习答案

练习1:把十进制200和66转换成二进制,把0b0011110转换成十进制。

200: 0b 1100 1000

66: 0b 0100 0010

0b 0001 1110: 30

练习2:0b 010 001 010 转换成八进制

得到:0 212

练习3: 04561转换成二进制

解析:在C语言中,0起始是八进制的代表,题目中给的数是一个八进制的数,将其转换成二进制
0b 100 101 110 001

练习4:0b 1011 1010 1111(转成十六进制)

结果:0x BAF

练习5: 二进制0b01111110转换成八进制,十进制和十六进制数。

八进制:0176

十进制:126

十六进制:7E

练习6: x  y  _A7b_3x  3’a  x*y  @  b.8  while  sum  a100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值