前言
学习关键字,运算符sizeof,函数scanf(),整数类型和浮点类型,printf()和scanf()读写不同类型值
一、数据
1.位、字节、字
最小的存储单元是位(bit),存储0或1.
1字节是8位,有256个0/1组合,可以表示0~255的整数或一组字符。
8位计算机一个字是8位,目前有64位。
整数没有小数点,计算机以2进制存储。
浮点数有小数点,计算机把浮点数分成小数部分和指数部分分别存储(二进制和2的幂存储)
2.int类型
存储一个int要占用一个字长,一般32位个人计算机用32位存储一个int,int的取值范围为-32768~32767。
变量要声明和初始化。
int cows;
cows = 10;
//或者
int cows = 10;
%d : 占位符,int类型,要与待打印的数量对应
printf("%d minu %d", cows,2);
0x或0X前缀表示十六进制数,0前缀表示八进制数。
计算机内部都是二进制编码。
显示八进制: %o
显示十进制:%d
显示十六进制: %x
若要显示各进制数的前缀0、0x、0X,必须使用%#o, %#x,%#X
#include <stdio.h>
int main(void)
{
int x = 100;
printf("dec = %d; octal = %o; hex = %x\n", x, x, x);
printf("dec = %d; octal = %#o; hex = %#x\n", x, x, x);
return 0;
}
int: 16或32位,试机器是16还是32而定
short int 类型:用于较小数值,比int位小,节省存储空间
long int :用于数值较大,比int位数多(现常见32位)
long long int : 适用于更大的数值(常见64位)
unsigned int : 用于非负,取值范围0-65535(对于16位机器,int有符号,符号位占一位,只能表示-32768~32767)
整数溢出的时候会从起点开始,比如int i = 2147483647; i+1会变成-2147483648
%u : 打印unsigned int 值,转换说明
%ld : 打印long 类型的int
%lx: 以十六进制格式化打印long类型
%lo:以八进制格式化打印long类型
%hd: 十进制显示short类型
%ho:以八进制显示short类型整数
%lu:unsigned long类型
%lld : long long 类型
#include <stdio.h>
int main(void)
{
unsigned int un = 3000000000; /* system with 32-bit int */
short end = 200; /* and 16-bit short */
long big = 65537;
long long verybig = 12345678908642;
printf("un = %u and not %d\n", un, un);
printf("end = %hd and %d\n", end, end);
printf("big = %ld and not %hd\n", big, big);
printf("verybig= %lld and not %ld\n", verybig, verybig);
return 0;
}
2.char类型
标准ASCII编码取值范围0-127,只需7位二进制数,char定义为8位
声明和初始化:
char response;
char grade = 'A';
单引号括起来为字符常量,双引号括起来的叫字符串
单引号只适用于字符、数字和标点。
转移序列:char nerf = '\n';
转移序列 | 意义 |
---|---|
\a | 警报 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\\ | 反斜杠\ |
\’ | 单引号 |
\" | 双引号 |
打印字符: %c
/* charcode.c-displays code number for a character */
#include <stdio.h>
int main(void)
{
char ch;
printf("Please enter a character.\n");
scanf("%c", &ch); /* user inputs character */
printf("The code for %c is %d.\n", ch, ch);
return 0;
}
3._Bool类型
表示逻辑值,true或false,用1表示true,0表示false
4.浮点数
计算机中的科学技术法写为e计数法,e后面的数字代表10的指数。
float 32位,double 64位。
浮点型常量的基本形式是:有符号的数字(包括小数点),后面紧跟e或E,最后是一个有符号数表示10的指数。正号可以省略。可以没有小数点(如2E5)或整数部分(如19.28)但是不能同时省略两者。可以省略小数部分(如3.E16)或整数部分(如.45E-6)但不能同时省略两者。
不要在浮点型常量中间加空格,如1.56 E+12(错误)
浮点数后面加f或F后缀可覆盖默认设置将浮点型常量看做float类型,如2.3f。使用l或L后缀使数字成为long double类型。没有后缀的浮点型常量是double类型。
打印浮点值用%f转换float或double类型浮点数,%e打印指数记数法的浮点数,打印long double的类型用%LF、%Le。
浮点数上溢:数字过大,会给浮点数赋值一个无穷大,inf
NAN:not a number ,未定义
sizeof():以字节为单位返回给出指定类型的大小
%zd:提供sizeof()的转义说明
给出当前各个类型的大小:
//* typesize.c -- prints out type sizes */
#include <stdio.h>
int main(void)
{
/* c99 provides a %zd specifier for sizes */
printf("Type int has a size of %zd bytes.\n", sizeof(int));
printf("Type char has a size of %zd bytes.\n", sizeof(char));
printf("Type long has a size of %zd bytes.\n", sizeof(long));
printf("Type long long has a size of %zd bytes.\n",
sizeof(long long));
printf("Type double has a size of %zd bytes.\n",
sizeof(double));
printf("Type long double has a size of %zd bytes.\n",
sizeof(long double));
return 0;
}
二、使用数据类型
用int或float类型表示数字,用char表示字符,使用变量前必须声明并选择有意义的变量名。初始化变量应该用与变量类型匹配的常数类型。
C编译器把浮点数转化为整数时u,直接丢弃小数部分而非四舍五入。