C语言基础

来源:互联网 发布:cf总是网络出现异常 编辑:程序博客网 时间:2024/05/17 04:52

转义字符

        如果把“写入" "中将引起编译器的误解,因为前两个双引号已经构成了一个字符串,而后一个则由于没有与之对应的"而无法解释。这个时候通常是在\后加一个字母来表示一些无法直接书写的符号。在" "之内的\并不意味着\字符本身,而是和后面的一个字母共同作为一个字符而被编译器理解。

转义字符:\“  \n  \t  \\  \' \a  \b  

        另外在C语言中,当调用printf时,如果字符串中出现了%则要写成%%这样才输出一个%,因为在printf输出的字符串中,%有特殊的含义



数据类型:

        凡是编程者都要面对三个世界:问题世界、代码世界、机器世界

        机器数一律”整存整取”,在计算机内部内存是存储中心。内存中的数据有一个特点,就是无论流入还是流出都是“整存整取”,这个整存整取的单位就是位组(byte).比如123D表示成2进制需要7位,但是由于123在内存中一定被存储为若干个字节其位数一定是8的倍数,前面多余的位数写0

数据的输出问题:

         编译器把代码中的123D转换成2进制存储在内存中,如果希望把内存中的2进制数在屏幕上输出就需要一个反向转换,即把2进制数转换成适当的文字序列。这个转换和输出可以通过printf()函数来实现

printf("%d",123);

%d叫做转换说明,转换说明以%开头后面可以跟适当的转换说明符。这里d表示吧一块4byte中的内存内容当成一个2进制数转换成对应的十进制格式的字符序列并插入%d中%d所在的位置输出。被转换的2进制整数写在格式格式控制字符串之后,两者用,隔开

定义变量:

int i;对于编译器而言,int i;意味者去寻找一块空闲的内存,大小为int类型数据所占据的内存空间,同时代码和计算机约定把这4byte的内存空间叫做i

定义一个i然后打印他得到的会是一些垃圾值

计算机中表示负数的几种方法:计算机采取哪种码制是CPU的事情与C语言无关

(1)原码

源码表示法用机器中的某一位(最高位)来表示正负号,其余个位表示数的绝对值

16bit的原码可以表示从1111 1111 1111 1111到0111 1111 1111 1111之间的所有整数(即-32767D到+32767D)。原码中1000 0000 0000 0000和0000 0000 0000 0000表示同一个数即+0和-0

(2)反码

反码仅在表示负数时和原码不同。负数的反码是把负数的原码绝对值0改为1,1改为0.反码同样能表示从1000 0000 0000 0000到0111 1111 1111 1111(-32767D到+32767D)之间的所有整数

(3)补码

最常用的是补码表示方法,正数的补码表示方式和上面两种是一样的,负数的补码一般是反码加上个1的结果。原码的-0被补码用来表示-32768

int类型值的范围

数据类型值的范围是把问题世界中抽象归纳出的数据在代码中表示为何种数据类型的依据之一

C语言没有具体规定与int类型对应的机器数具体应该是多少bit,但是规定了最少是16bit。在不违背这条原则的情况下编译器可以自行确定int类型占多少bit

C语言要求编译器自行确定的int值的范围,并把int类型值的最大值和最小值写在limit.h中

常见误区:

(1)把0作为十进制int类型常量

(2)把负数当做常量

十进制写int类型常量不允许以0开头并且不能出现0-9以外的任何字符包括-

无论十进制、八进制、十六进制Int类型常量,值都必须是非负的,且在编译器规定的int值的范围之内

123-456不是int类型因为-“一”是一个运算

-456也不是int类型因为-号也是一个运算

unsigned类型的运算及规则:
unsigned类型是否可以进行-运算或者一个小的unsigned类型是否可以减去一个大的unsigned类型。C语言规定:-unsigned类型值就是0u-unsigned类型值,这两个问题就合并为同一个问题

值小的减去一个值大的会得到一个负数,这个负数不在unsigned类型表示的范围内却在int表示的范围内。如果把这个int类型值的补码形式理解为相同形式的unsigned类型,那么这个就是结果

‘A’是int类型而不是char类型


   





0 0
原创粉丝点击