Linux学习之路(4)

gcc的使用

1、计算机能识别的唯一语言是二进制语言

语言的发展:

机器语言

二进制数据:1101 0101

 

汇编语言

用符号表示一组操作 add call mov…  

优:直接操作硬件,速度快

高级语言

以语句为单位进行操作

优:可移植

 

c语言是中级语言,具备汇编语言的特性,同时也具备高级语言可移植的特性

 

不管什么语言,要想被计算机执行,必须先转换为机器码

编译器:将原来的代码(源代码)编译成计算机可执行的代码(程序)

相同的代码经过不同的编译器编译,可以被不同的设备执行

Linux系统常用的编译c语言的编译器是:gcc

 

2、c语言程序编译步骤

预处理(预编译)

处理"#"开头的内容,进行替换,去掉注释。。

生成预处理文件.i

编译

编译器对代码进行编译——>最复杂、耗时的过程

生成汇编文件.s

汇编

把汇编文件编译成二进制文件

生成目标文件.o

链接

把多个目标文件按一定的规则整合成一个可执行文件

生成最终可执行程序

 

3、gcc的命令

gcc -E

对文件进行预处理,生成预处理文件

gcc -S

对文件进行编译,生成汇编文件

gcc -c

对文件进行汇编,生成目标文件

gcc -o

对文件进行重命名

gcc 默认生成文件名为 a.out

如果想自定义生成的文件名,编译时加" -o 新文件名"

如果在程序中使用了"math.h"文件,编译时要在后面加" -lm"

 

4、程序执行

Linux下执行程序,直接在终端敲文件名(带上路径,相对路径或者绝对路径)

./a.out             "./ "不是命令,是相对路径的写法,代表当前目录

/mnt/hgfs/code/171/4/a.out          绝对路径

 

网卡设置

改虚拟机为固定IP:/etc/network/interfaces

 

网卡重启:/etc/init.d/networking restart

关网卡:ifdown eth0

开网卡:ifup eth0

 

hello wold

1、头文件的包含方式

#include <stdio.h>

默认从/usr/include/目录下搜索文件

#include "stdio.h"

#include "../stdio.h"

先在当前目录下搜索文件,如果没有,再去/usr/include 下找

 

2、stdio.h

c语言的标准输入输出头文件

 

3、main

1、有返回值,返回值是int类型,用来表示程序结束状态,如果程序正常结束,返回0,异常结束,返回其他值

2、c语言有且只有一个main函数

3、程序是从main函数开始执行的

 

4、{}  :代码块

 

5、return : 表面函数结束,下面的部分都不执行

 

6、printf():stdio.h中定义的一个函数,使用该函数必须包括stdio.h头文件

 

7、注释:

1、//                单行注释

1、/*  */       多行注释

 

8、编码规范

1、"{"下面一行内容和"{"要有4个空格的缩进

2、单词之间要有空格

3、不同的逻辑之间要有空行

 

9、c语言语句是以";"结尾

 

内存

程序:

1、没有运行的程序              就是一堆代码,存在存储设备中,如:硬盘,U盘

2、运行的程序                     程序会被读到内存中执行,内存中存该程序的可执行代码,数据等

 

存储单位:

1、bit

位,比特,是一个二进制数字,只能表示0或1,单位是b

2、Byte

字节,单位是B        1B=8b ==> 是内存的最小存储单位

3、KB

1KB=1024B          =  210 ?

4、MB

1MB=1024KB       =  220 ?

5、GB

1GB=1024MB       =  230 ?

 

内存最小的存储单位是字节,如何管理?

内存为每个字节分配了一个编号,类似于人多身份证号==>这个编号就是内存的地址

编号?==>是一个数字,是否有范围?

 

 

内存为字节分配的编号位数和身份证号一样是固定的

1、 32位系统

编号是32位

进制二进制

0000000……101010(32位)

2、 64位系统

编号是64位

进制二进制

0000000……101010(64位)

32位系统 ————>内存编号是4字节编号—————>最大能有多少字节?

范围:0000…0000(32个)————>  1111…1111(32个)

                   0                   ————> 232−1

总共232字节==4G?

 

数据存储

内存存的是二进制数据,以1个字节为例:

1、无符号数:0000 0000 ————> 1111 1111

                                    0           ————> 255(28−1)

2、有符号数:带正负的数

     内存取最高位为符号位

最高位

类型

0

1

存:

正数在内存中的存的数据本身

负数是要转换成二进制,对其取反,符号位不变,然后+1

比如:

5:实际在内存中的值为:0000 0101

-5:1000 0101(-5)————>1111 1010(取反)————>1111 1011(+1)

所有,-5实际上在内存中的值为:1111 1011

0在内存中为: 0000 0000

-0=-128:         1000 0000

有符号数取值范围:1000 0000~01111111

  (−27) -128 ~  127  (27−1)

有符号数,在一个字节范围内:

     127+1 = -128

     127 在内存中的存储: 0111  1111

      1在内存中的存储:     0000  0001

      和                       :    1000  0000   ===>-128

      1111 1111 代表 -1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值