无符号数和有符号数如何进行比较:有符号数会先进行隐式转换成无符号数(即是底层的补码不变,但是此数从有符号数转换成了无符号数)
例如:int类型的数据与unsigned int 类型的数据进行比较时,会把int类型的数据转换为unsigned int 类型的数据,然后再进行比较,
int data = 1; 与unsigned int = 1000;进行比较时,会把int = 1转换为unsigned int = 4394967295,再进行比较。
变量的三大特点:
变量的数据类型:主要说明变量占用的内存空间大小,如:int型占用四个字节。
变量的作用域:变量的可用代码范围,就是这个变量的作用域。
提高了逻辑局部性,增强了程序的可靠性,减少名字冲突。
变量的存储类型:即是变量分配使用内存空间的方式,也称存储方式。可分为静态存储和动态存储两种方式。
进程:狭义定义:是指正在运行的程序实例;
广义定义:是一个具有一定独立功能的程序关于某个数据集合的运行活动,它是操作系统中动态执行的基本单元,再传统操作系统中,进程既是基本的分配单元,也是基本的执行单元。
当创建一个进程时,操作系统会为该进程提供一个4G大小的虚拟地址空间,最终映射到物理内存中。
虚拟地址空间(4G):又分为两个部分:一个G分给内核,三个G分给用户空间;用户空间又分为栈空间,堆空间,(全局)数据区,代码段。
栈空间:局部变量 函数形参 自动变量 分配在 栈空间中。
特点是:先进后出 由系统管理,当局部变量执行完释放。
堆空间:malloc calloc ralloc 在堆空间上分配。
特点是:先进先出 由用户管理,例free(temp)释放。
全局数据区:bss区:保存未初始化的全局变量,
ordata:保存常量,
静态数据区:保存初始化的全局变量和static修饰的变量。
注:全局变量未初始化,系统会设定给一个初始值 例如,num = 0,
注:局部变量未初始化,系统会随机给一个值。
代码段:通常是指用来存放程序执行代码的一块内存区域。
全局变量和局部变量的区别:
(1):作用域不同:全局变量作用域为声明之后的整个文件 整个程序结束后释放,而局部变量只在某个程序的函数被调用的范围内使用,函数调用完就释放。
(2):未初始化:全局变量未初始化会被系统预先设定的给的值,而局部变量会倍系统随机给定一个值。
(3):存储位置不同:全局变量存储在全局数据区,局部变量存储在栈空间内。同时出现时,局部变量先起作用,优先级高于全局变量。
声明:(1),定义性声明:int a;//为变量a分配内存空间;变量都是先声明后定义。也可以定义时声明。
声明可以多次声明,不分配内存空间
定义只能定义一次,并且分配内存空间。
(2)引用性声明:extern int a;//告诉编译器变量a在其他文件定义,不分配内存空间。
小数点数用二进制表示:整数部分除2取余,小数部分乘2取整数部分。
例如1.25=1.01b
1/2=0...1余数为1 0.25*2=0.5 整数部分为0 0.5*2=1.0整数部分为1 就没小数了 所以就是1.01.
例如0.2
0.2*2=0.4,整数部分为0 0.4*2=0.8 整数部分为0 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 0.6*2=1.2 整数部分为1 .............. 0.2=0.00110011.....不过一般到第二个0.8 就停止了。
段错误:是指访问的内存超出了系统所给这个程序的内存空间。
常见的段错误:大部分由指针引起的,1.访问系统数据区 2.内存越界。