数据类型
一、常量变量
二、整型
1.定义
int,short,long,long long
signed,unsigned
2.输出
- printf()
3.输入
- scanf()
4.大小与取值范围
- sizeof函数
注意signed最高位为符号位
三、字符型
- char 存储大小为1字节(BYTE)
四、浮点型
- float,double 精度不同,存储大小不同
五、进制
计算机中主要以补码形式存储
1.转换
- 2、8、16进制转为10进制:权值法,N*(k^n),n从0开始(10进制的位数)
10进制转为2、8、16进制:反序求余,10进制书除以k得到一组余数,取反后得答案
2.八四二一法则
- 可以运用加法来快速转换2进制 10(10) = (2+8)(10) = (10+100)(2)
三位2进制<—>一位8进制,四位2进制<—>一位16进制,二位8进制<—>一位16进制
3.二进制存小数
- 小数部分与2相乘,不足1取0,足1取1,小数有几位就算几位2进制
如0.456:
0.456*2 = 0.912——0
0.912*2 = 1.824——1
0.824*2 = 1.648——1,与整数相反,向下取:011
4.术语(字节BYTE)
word双字节16位
dword两个双字节,32位
1b(it)
1B(yte)
1K
1M
1G
1T
1Kb
1KB
1Mb
1MB
六、数据存储
1.原码、反码、补码
- (正数与原码相同,负数除符号位不变0变1、1变0)
char ch = 10;(char类型1BYTE)
原码:0000 1010
反码:0000 1010
补码:0000 1010(正数三码相同)
char ch1 = -10;
原码:1000 1010
反码:1111 0101
补码:1111 0110(负数在反码的基础上加1)
2.补码:
1.统一了0的编码:0与-0
2.简化数据加减计算,将减法变加法
3.将符号位与其他位统一处理
4.两个补码相加,若最高位进位,则舍弃进位
例如:76 - 82
原码:0100 1100(76)
反码:0100 1100
补码:0100 1100
原码:1101 0010(82)
反码:1010 1101
补码:1010 1110
补码:0100 1100(76-82)
补码:1010 1110
补码:1111 1010(-6)
反码:1111 1001
原码:1000 0110
8bit数据最大存储127,-127补码为1000 0001
- 字符型,最小-128 补码1000 0000 = 原码,就是-0为区间最小值-128
类比其他数据类型int -2^31 ~ 2^31 - 1
七、数值溢出
高位丢失
八、限定符
extern
const
volatile
register
九、 格式化输入输出
1.字符串常量
- 在内存中一段连续的char空间,以\0结尾,遇到\0就会直接结束,没遇到\0就会乱码
一直往下找直到出现\0
char *g= "hello\0 world";
printf("%s\n", g);
%s是char *类型!!!
2.printf的附加格式
%-5d 5为限定五位(如果数字位数大于限定位数,则以数字为主),-为左对齐,默认右对齐
%05d 以0补空位,小数点也算一位
%3.1f 一共3位,1位小数
3.putchar
- 输出字符可以是一个 变量,字符,数字(一个字节int类型),转义字符
4.scanf
- 输入多个必须有空格或者换行(回车)间隔,如果键盘输入要和输入格式一致
char ch, ch2;
scanf("%c,ch2", &ch, &ch2);#键盘输入时也要有,
putchar(ch);
#限定输入3位,真实输入多于3位,系统自动将多出来的放到另一个输入中:a = 123456,输出a = 123
int a, b;
scanf("%3d%d")
5.getchar
- 接受字符,只有一个!!!