类型语言

  • 变量提前定义

  • 必须确定类型

    语言两个发展方向:强类型(c++,java),弱类型(javascript,php,python)

数据类型

  • 整数
    char -> 1Byte,short -> 2Byte,int,long,long long -> 8Byte
    int 表示寄存器的大小
  • 浮点数
    float,double,long double
  • 逻辑
    bool
    #include “stdbool.h”
  • 指针
    *
  • 自定义类型

类型的区别

表达的数的范围:char < short < int < float < double
输入输出格式化:%s %d %ld %lf
内存所占字节:1-16
内存中表达形式:二进制、编码

计算机内部表达

计算机内部一切都是二进制

补码,负数

-a = 2^n - a
1
2
3
4
5
6
7
8
char c = 255;
int i = 255;
printf("c=%d, i=%d\n", c, i);
// c -> 11111111
// i -> 00000000 00000000 00000000 11111111
// 输出结果
// c = -1
// i = 255

unsigned

unsigned char c = 255;
char c = 255u;
纯二进制数,不看成补码

整数边界

↓- -128 | 127 -↓
...          ...
↑- -1   | 0   -↑
1
2
3
4
5
6
7
8
9
10
11
12
13
char c = 127;
c = c + 1;
printf("c=%d\n", c);

// 输出结果
// c = -128

char c = -128;
c = c - 1;
printf("c=%d\n", c);

// 输出结果
// c = 127

进制

0   8进制
0x 16进制
1
printf("0 = %o, 0x = %x\n", 8进制,16进制);

科学计数法

-5.12E+16

浮点运算

±∞ Nan
float  精度 7位
double 精度 15位

类型自动转换

当运算符两边出现不一致的类型,会自动转换成较大的类型
printf:任何小于 int 的类型会转换成 int,float 会转换成 double
scanf:要输入 short,需要 %hd

//强制转化,不会更改原始值,优先级高于四则运算
(int) 10.21