一、 整型数据存储格式
1、整形数据在内存中是以补码形式存储的。
2、整数的原码,反码,补码相同,符号位是0,其余各位表示数值。
3、负数的原码,反码和补码不同。
原码:符号位为1,其余各位表示数值的绝对值。
反码:符号位为1,其余各位对原码取反。
补码:反码末位加1。
上面说的都是有符号的整数,而无符号整数不能表示负数。
二、实型数据存储格式
实型数据一般占据4个字节的内存空间,按指数形式存储。
实型数据的存储规律
小数部分占的位数越多,数值的有效数字越多,精度越高。
指数部分占的位数越多,则能表示的数值范围越大。
字符型数据的存储格式
每个字符变量被分配一个字节的内存空间。存储的是字符的asscll码。例如C的asscll码是67,用二进制表示为1000011,在内存中以0 1 0 0 0 0 1 1 存储。
基本数据类型
整型的输入和输出:使用基本格式说明符%d、%o和%x输入输出整型数据
#include<stdio.h>
int main()
{
int i,j,k;
printf("输入i,j,k,分别为八进制、十进制和十六进制:\n");
scanf("%o%d%x",&i, &j, &k);
printf("分别输出i,j,k的八进制、十进制和十六进制:\n");
printf("%o %d %x\n",i, i, i);
printf("%o %d %x\n",j, j, j);
printf("%o %d %x\n",k, k, k);
return 0;
}
可以看出,可以像对数值那样对字符进行操作。
字符型常量:指的是单个字符,用一对单引号括起来的字符表示,
转义字符:是以反斜杠’\’开头的字符序列。
例如:’\r’回车 ‘\n’回车换行。
字符的输入与输出
可以调用函数scanf、printf、getchar和putchar。
在输入多个字符时,这些字符之间不能有空格,因为空格本身也是字符,它作为字符看待。
注意:字符输入时不需要单引号,这一点与字符常量在程序中的表示不同。
getchar和putchar,每次调用getchar时,它会读入一个字符,并返回这个字符。为了保存返回的字符,需要使用赋值操作将返回的值存储在变量中。ch=getchar();
putchar是输出单个字符,例如;putchar(ch);
scanf和printf可以一次性输入输出多个字符,而getchar和putchar一次只能输入输出一个字符,但是它有灵活性的使用方法,例如:`while((ch=getchar())!=’\n’);
这段程序用于输入输出多个字符,当碰到回车换行时结束,这也是getchar常用的方法。
/*输入一串字符以回车作为结束,统计输入字符个数*/
#include<stdio.h>
int main()
{
char ch;
int num=0;
printf("输入一串字符以回车符结束:\n");
while((ch=getchar())!='\n')
{
num++;
}
printf("一共输入了%d个字符\n",num);
return 0;
}
程序分析:对于循环次数未知的程序,一般采用while语句;对于统计个数的程序通常设置一个整型变量记录数值,且在使用前一定要赋值为0,否则将得到任意值;循环条件的书写最为重要。
计算数据类型在计算机中所占内存大小。
#include<stdio.h>
int main()
{
printf("sizeof(char)=%ld\n",sizeof(char));
printf("sizeof(int)=%ld\n",sizeof(int));
printf("sizeof(float)=%ld\n",sizeof(float));
printf("sizeof(double)=%ld\n",sizeof(double));
return 0;
}
可以看出char=1,int=4,float=4,double=8字节。