C的初步认识

首先必须强调C语言一种强类型语言,它所要使用的每个对象都必须具有声明类型,切它的类型不可变;(必须先定义,后使用)

再者在C的编译过程中有4种文件:

源文件.c文件;(文本文件)

进行预编译以后.i文件;(文本文件)

编译后的目标文件.obj或者.o文件;(2进制文件)不可执行

链接后的.exe的可执行文件。

在执行文件时,会分配4个区域:

.Code(代码区)

.date(数据区)

.heap(堆区)

.stack(栈区)

两个凡是:

凡是在函数外定义的变量在数据区

凡是在函数内定义的函数在栈区

类外(static)静态

静态会使局部变量存储在数据区

为什么在执行文件时,会分配4个区域:

为什么要进行预处理,编译,链接

预处理将#中的库里面的代码导出到代码中,以方便,调用的使用,编译是为了将文本文件转换成2进制文件以供给电脑识别

类型:

在C语言中基本类型分为char  short int  int  

long int long long  double  float  long double  bool  

类型

字节

char

1

short int

2

int

4

long int

4

long long

8

double

8

float

4

long double

8/12

bool

1

1字节=8bit;1bit代表一位0或者1;

因此我们可以得出char等类型数据范围char有一字节就是8位也就是char能代表2的8次方个数256位数有符号位的话就是-128-----127,如果没有符号位的话也就是0-255;

原码,补码:

众所周知C语言有原码和补码两种,之间的转换方式也是,如果原码为正数,那么补码等于原码,如果原码为负数,那么补码等于原码取反加一;

那为什么要使用补码呢?为什么负数的补码等于原码取反加一呢?

首先我们的计算机其实是没有其他运算的,它只有加法运算;那么减法怎么实现呢?我们伟大的计算机人发明了补码,类如5-5

他就等于0000 0101与1111 1011相加,相加后它溢出了一位所以计算机输出的就是0000 0000;

类型的扩充:

类如将char扩充为int则需要记住从小的类型扩充成大的类型;如果数据类型是有符号的则扩充符号;无符号的扩充0;大类型缩成小类型,直接切断;

因为我们的系统是32位所以在运算过程中会开辟4字节进行运算

且我们的计算机是低低地址高位高地址的小端存储。

思考题 :

char a=-5;   unsigned int x=10;

a在电脑内存中的存储应该是补码1111 1011(-5)

x在电脑内存中的存储应该是0000 0000 0000 0000 0000 0000 0000 1010(10)

根据不同类型的数值比较,都是要先转化为同样类型的数值,然后再比较。signed型会默认变成unsigned型,小字节会默认变成大字节类型;

1111 1111 1111 1111 1111 1111 1111 1011(251)a

显然a>x

输出应为-5>10

猜你喜欢

转载自www.cnblogs.com/ior-chen/p/11681149.html