1、C语言的几种基本类型:(主要对char展开介绍)
整型:char short int long longlong.......
字节: 1 2 2/4 4 8
注:一个字节占8个bit位。
浮点类型: float double.......
字节: 4 8
对于char(迷你整型):
如图所示,可知无符号char的取值范围为:(0~255)
注:255为2的8次方减1
有符号char的取值范围为:(-128~127)
注:127为2的7次方减1
ASCII 的取值范围为什么是 0-127,因为为了提高代码的可移植性,无符号取值范围是 0-255,有符号的取值范围-128 -127,两个取值范围的交集就是 0-127,所以ASCII 的取值范围正好在这个地方。
当没有标明signed或unsigned时,编译器默认char有符号,此时取值范围为(-128~127)
例:
char a=101;
int sum=200;
a+=27;
sum+=a;
printf("%d\n",sum);
求此时输出的值:72
当101+27时等于128此时默认char是有符号的,故变为-128,然后在与200相加得到正确答案72
例2:
Int main()
{
For(char i = 0;i < 128;i++)
{
Printf(“%d ”,i);//这一步为死循环,当加到127时再加一位回到-128,然后继续循环,故输出为-128~127的无限循环
}
Return 0;
}
2、正负数的原反补码:
正数的反码和补码相同,若要求负数的补码,先对负数取绝对值得到正数然后求该正数的反码再加1
例:
求-12的补码:
12的源码:0000 1100
12的反码:1111 0011
加1: 0000 0001
-12的补码:1111 0100
3、十进制与二进制八进制十六进制的转换:
将十进制转换成二进制时,现将2从2的零次方到2的n次方列出来,再将要转换的数字与其从大到小相比较,若该数字大于等于2的n次方则为1,再将该数与2的n次方相减,将得到的数字在与下一位比较,若小于则为0,并且不相减。
例:
求125的二进制:
2的n次方: 128 64 32 16 8 4 2 1
125的二进制:1 1 1 1 1 1 0 1
三个二进制位为一个八进制位,四个二进制位为一个十六进制位。
4、 讲解第一个C 语言程序”Hello World”:
#include<stdio.h> //以#开头的预处理指令<>指在include文件中找stdio.h文件
int main() //main函数是所有程序的入口,int 为函数返回值类型
{
printf("hello,world\n");
return 0; //return后面跟的值为其表达式,return 0表示返回成功
}
5、显示类型转换和隐示类型转换:
显示类型转换:float a = 15.2; int b = a; 这时会发生警告,所以,当在赋值的时候加上 int b= (int)a; 在运算过程当中:
float a = 3.33 float b =4.44
int c = (int)a+(int)b;//对 a 和 b 都进行了强制类型转化
int c = (int)a+b;//只对前一个转换
int c = (int)(a+b);//对 a+b 进行转化这样就是强制类型转换。
隐示类型转换:
双目运算中,低类型的数据直接转换为高数据得数据,其中无符号整数类型高于有符号的整数类型,int 数据类型之下的运算转换成 int 类型处理。
如:char 类型 short 类型的运算转换为int 数据类型。
long 与double 型数据运算,先将 long 型数据转换成 double型,结果为 double 型。
一个 float 型数据与一个浮点型的默认运算是 double 型,意味着两个 float 数的运算可优先转换为double 型,结果的类型也可以是 float 型。
6、程序运行简介:
7、浮点数在内存当中是如何存储的?
浮点数分为单精度浮点数和双精度浮点数,但不管是单精度还是双精度,在内存中都分为三部分存储,这里对单精度浮点型展开说明第一部分为符号位,占1个比特位,其中0代表正,1代表负。第二部分为指数位,所谓的指数指的是将一个十进制数转化为二进制数的形式再用二进制的科学计数法的形式表示出来,这里的指数指的是二的n次方中n的数值,占8个比特位,并且该数值在该内存中的表示等于指数n加127后的数值的二进制。第三部分为尾数部分即小数点后的数值,从最左边开始存储,占有23个比特位,存储完成后多余的位置用0补充。
对于双精度浮点型,第一部分占一个比特位,第二部分占十一个比特位,第三部分占五十二个比特位。
单精度浮点型实际指数的取值范围为(-126~127)