0.问题引入
我们知道计算机是人类用来解决某些问题的一种工具而已。
那计算机是通过什么来解决问题的呢?
计算"computer"
计算机通过把问题域的一些数据保存起来,然后通过某些算法
从而得到计算的结果。
程序 = 算法 + 数据结构
数据如何保存?
和数据的属性: 数据的大小、取值范围、所需内存大小 ==
在C语言中,如果要保存一个数据,那么您就得研究它是什么类型的数据。
-
数据类型
什么是数据类型?
数据类型就是数据的类型。C语言中,整数的默认类型为Int 浮点数的默认类型为 double
typeof(x) => 求对象x的类型。
例子:
typeof(1) => int
typeof(1.0) => doubleint x; typeof(x) => int char a; typeof(a) => char typeof(250) =>int typeof(250.0) => double typeof(2.5f) => float typeof(2.5) => double ......
#include <stdio.h>
int main()
{
//typeof(1) a; // <=> int a;
//声明一下: 在咱们的编译器下面可以用typeof,
//但是不代表所有的编译器都可以。
char a = -1;
printf(" a == %d\n", a); // -1
unsigned char b = -1;
printf(" b == %d\n", b); // 255
unsigned char c = 260; //不会报错
printf(" c == %d\n", c); //
}
在C语言中,有如下类型:
(1) 基本类型 : C语言已经给咱们定义好了的类型。
a、整数类型
char/unsigned char (字符型) - 保存的是ASCII
short/unsigned short 短整型
int/unsigned int 整型
long/unsigned long 长整型
....
上面的这些基本类型,他们都是用来保存整数。
那么他们之间有什么区别?
1. signed / unsigned
有符号(signed): 符号位(最高位) + 数值位
1 -> 负数
0 -> 0/正数
无符号(unsigned): 所有的bit位都是数值位
2. char / short / int / ....
所占内存空间大小不一样。
char -> 8bits
取值范围: [-128, 127]
unsigned char -> 8bits
取值范围: [0, 255]
问题:
unsigned char a = 260 ; // test1.c
short / unsigned short -> 一般 16bits
int/unsigned int : 32bits 的机器下, 一般为32bits
64bits 的机器下, 一般也为32bits
long/unsigned long : 32bits 的机器下, 一般为32bits
64bits 的机器下, 一般为64bits
注意: 在不同的编译器,同一类型的取值范围可能不一样!!
如:
keil
int 16bits
ubuntu 14.04
int 32bits
sizeof(x) : 求对象x所占的字节数
1Byte == 8bits
x可以是 常量、变量、类型 ==
例子:
sizeof(char) == 1
sizeof(1) == 4
一般来说,基本类型所占的空间的大小符合:
sizeof(long) >= sizeof(int) >= sizeof(short) >= sizeof(char)
3. 在GCC编译器,整数默认类型 是 int .
typeof(3) => int
int a;
typeof(a) => int
typeof(3 + 4) => int
typeof(3 + 4.0) => double
"自动向高精度转换" => “自动向所占空间大的转换”
练习:
打印出基本类型在您的编译器下面所占的字节数是多少。
#include <stdio.h>
// '=' 赋值符号 将右边的值,赋值给左边的那个玩意儿
// '==' 等于符号 用来判断左右两边大小关系的
int main()
{
int a,b,c,d;
a = sizeof(long);
b = sizeof(int);
c = sizeof(short);
d = sizeof(