1.数据类型及所占字节
整型 char, short, int , long, long int, long long;
(所占字节 1, 2, 4/2, 4 , 4, 8 )
浮点型 float, double;
(所占字节 4 , 8 )
//float f = 123456789;
double l =123456789;
运行结果:f=123456792.000000;
f=123456789.000000
分析结果; 实型常量不区分float型和double型,可以赋给float型和double型变量,根据变量的类型截取常量中的有效位数字。
2.char示例(死循环)
for(char i = 0; i<128; i++)
{
printf("%d",i);
}
char的取值范围为(-128,127),127在计算机内存中为0111 1111,给127+1后得到1000 0000,此为-128的补码,所以“127+1=-128”,循环可以无限进行下去。
3.求十进制数的二进制,八进制,十六进制以及负数在内存中的存放形式
例:127进行进制转换
转换为二进制:将2^7~2^0依次排开,从右向左将127放在第一个大于它的数上面,127比此数大则为1,向右移一位,用127与左边数的差和新的数作比较,比它大则为1反之则为0,依次类推,得到127的二进制数为0111 1111。
转换为八进制:先转换为二进制,将得到的二进制数从右向左三个数一组排列,将每组的数值算出依次排列则为所求的八进制数,如127的八进制数为0000 0177。
转换为十六进制:先转换为二进制,将得到的二进制数从右向左四个数一组排列,将每组的数值算出依次排列则为所求的十六进制数,如127的十六进制数为0000 007F。
{
int b=012; // 01,012表示八进制数
int c=Oxa; //Oxa表示十六进制数
//输出b和c的值都为10
}
负数在内存中的存放形式为补码,补码等于反码加一,反码等于给原码取反(符号位不变,其余位取反)。
4.深度解析 char数据类型(迷你型整型)
有符号类型 signed char:取值范围 -128~127;
无符号类型 unsigned char:取值范围 0~255;
内存中最高位叫幻数(有时代表符号位)。
类型转换 隐性类型转换 short a = 5; int b = a;
强制类型转换 int a = (float)10.5;
隐性类型转换原则 double <------ float
unsigned long
unsigned int
long
int <---- short(char)
5.ASCII的取值为什么是0-127?
对于无符号char 0-255,有符号0-127,所以是0-127。
6、进入第一个程序"hello world",从头文件讲起到,返回值,为什么可以不写int?库函数?printf()需要的头文件?怎么调试?每一个程序执行要分为哪几步?
(1)返回值不写int ,可以写 void,那么最后不必return 0;
(2)主函数中未定义printf的使用但c程序开头我们调用了库函数(#include <stdio.h>);
(3)调试需设置断点;
(4)程序执行步骤:编辑,编译,链接,执行。
7.变量必须先定义后初始化再使用,定义在函数外的变量默认值为0。
8.
char a=5,b=-5;
short x,y;
x=a; //内存中char-->short只补符号位(对于之前的空位)
y=b;
9.浮点数在内存中的存储
一个浮点数分为阶码和尾数两部分,阶码用于表示小数点在该数中的位置(即二进制数用计数法表示后的指数),尾数表示数的有效数值。由于阶码表示小数点的位置,所以阶码总是整数,可以为正整数,也可以为负整数;尾数可以采用整数和纯小数的形式。(即将浮点数先表示为二进制数,将二进制数用科学计数法表示,阶码为此数的幂的二进制表示,尾数为小数点后二进制数)
在计算机内部,阶码通常采用补码形式的二进制整数(取指数加127后的二进制数)表示,尾数通常采用二进制小数的原码形式表示。
浮点数最高位为符号位,0为正,1为负;接下来八位为阶码部分;后23位为尾数部分。