Lseeon2 常用数据类型
数据类型
1、常量与变量
1.1 关键字
C的关键字有32个
- 数据类型关键字(12个)
- char,short,int,long,double,float,unsigned,signed,struct,union,enum,void
- 控制语句关键字(12个)
- if,else,switch,case,default,for,do,while,break,continue,goto,return
- 存储类关键字(5个)
- auto,extern,register,static,const
- 其他关键字(3个)
- sizeof,typedef,volatile
1.2 数据类型
作用:编译器预算对象(变量)分配的内存空间大小
整型:
#include
int main(void)
{
//黄瓜3元 ,购买5斤
const int price = 3; //常量,只读变量
//price = 5;//error
int weigt = 5;
int sum;
sum = price * weigt;
printf("%d\n", sum);
return 0;
}
一个项目只能有一个main函数,因为这个问题出了好多错误,一直解决不了,最后排查 发现是可以写多个源文件,但是只能有一个main函数,在main后面加数字也不行!!!
**两个反斜杠\相当于一个'\' **
std::endl 换行 ,用<< 连接 : 例如:std::endl "零"< std::cout : 输出显示 system是用来直接调用cmd指令的,用法是system("要输入的指令") shutdown,直接关机 标识符定义规则: 打印命令:%d:输出一个有符号的10进制int类型 %o:输出8进制的int类型 %x:输出16进制的int类型,字母以小写输出 %X:输出16进制的int类型,字母以大写输出 %u:输出一个10进制无符号数 定义八进制以0开头:0123; 定义十六进制以0x开头:0x123 在计算机定义数据时,不可以直接定义二进制的数 输出: -10 写scanf时遇到警告的解决办法: 把警告写到最前面,#define +错误类型 方法二:#pragma warning(disable:4996) 数据类型占得大小不用死记硬背,用sizeof就可以查看 不同整型在不同的操作系统中占得大小可能不一样。但是总体规律满足:short<=int<=long 较小的数据类型赋值给大的数据类型不会出错,会自动呗转化。但是从大转小可能会发生数据丢失(高位被丢失)。 输出:整型int:4 输出: a 输出: 3.140000 a的地址找到:0x010FF97C 0a 00 00 00 大小端对齐,是倒着看得这个数字 输出: 0.032000 大写B就是Byte,小写b是bit的意思 一个字节是8位,字节是计算机中最小的存储单位 WORD——双字节:主要用于存储汉字 DWORD——两个WORD,4字节,32位 1K——1024B 1M——1024K C语言中二进制不能被直接表示出来 在计算机系统中,数据一律采用补码来存储。 对于正数,原码,反码,补码都相同 对于负数,补码为反码+1 算法1:(负数)补码符号位不动,其他位求反,最后+1,得到原码 算法2: 补码=原码取反再加1的逆运算。 10010110是补码,应先减去1变为反码,得10010101(补码的补码) 由反码取得源码即除符号位外其他为按位取反,得11101010,即十进制数的-106。 算法3: 负数补码速算法,由最低位(右)向高位(左)查找到第一个1与符号位之间的所有数字按位取反的逆运算 10010110是补码,符号位与最后一个1之间的所有数字按位取反,得11101010 8位数据最大存储值为???—— -27~27-1 最大值原码:01111 1111 =2^7-1=127 最小值: 原码:1111 1111 反码:1000 0000 补码:1000 0001 =-127 1000 0000 规定给了-128 数据存储时将-0对应的区间值设置为最小值 -2^7 无符号类型数据:不存在符号位 unsigned char(1字节) : 0000 0000 ~ 1111 1111 ——0~255 unsigned int(4字节) : 1111 1111 1111 1111 1111 1111 1111 1111 —— 0~2^32-1= 4294967295 当超过一个数据类型能够存储的最打范围时,会发生数据溢出 有符号位最高位溢出的区别:符号位溢出会导致正负发生变化,但最高位的溢出会导致最高位丢失 输出: -128 extern:声明一个变量 ,声明的变量没有建立存储空间 extern int a; 定义时创建了存储空间,一般不用写extern,因为定义的时候就是一个声明的过程 const:定义常量 volatile: 防止编译器优化代码 volatile int a; ,防止赋值之前被编译器优化,后面找不到了。 register: 定义寄存器变量,提高效率。register是建议型指令,而不是命令型指令,如果CPU有空闲的寄存器,就可以生效,没有的时候是无效的。 %s占位符,表示输出一串字符串,遇到\0停止。 “a”输出的时候,是占2个字符的,因为“”会默认是输出加上\0 ‘a’就只有一个字符 输出: hello world %% % 输出一个百分号 printf附加格式: 输出: 10 scanf中不能有\n作为格式,因为函数是以换行作为结束标志的 输出: a getchar作用:读取一个char类型的字符 输入a,输出a
2.2 整型:int
#include
166
a6
246#include
#include
字符型大小:1
32
30%#include
3.140000
float大小:4
double大小:8
a的地址为:00AFF744
b的地址为:00AFF738int main()
{
float a = 3.2e-2f;
printf("%f\n", a);//浮点型输出
printf("%e\n", a);//科学计数法输出
return 0;
}
3.200000e-022.6 进制
2.7 计算机内存数值存储方式
2.7.5 数值溢出
#include
-1272.8 类型限定符
2.9 字符串格式化输入和输出
#include
hello
hello world烫烫烫烫虜|o#include
=10 ===
=== 10=
=00010=
=1.56=
=1.56000=
=1.56000=
=0001.56=#include
a
456 123
456 123int main()
{
char ch;
ch = getchar();//getchar里面是一个void类型的
putchar(ch);
//如果cmd闪屏。可以写一个getchar();在return 0前面,跟system(pause)效果一样
return 0;
}