第5周:数据类型——5.1 数据类型

1. C 是有类型的语言

C 语言的变量,必须在使用前定义,并且确认类型。

早期语言强调类型,面向底层的语言强调类型。

C 语言需要类型,但是对类型的安全检查并不足够。


2. C 语言的类型


第5周:数据类型——5.1 数据类型_第1张图片


3.类型有何不同


第5周:数据类型——5.1 数据类型_第2张图片


4. sizeof

是一个运算符,给出某个类型或变量在内存中所占据的字节数。sizeof ( int ); sizeof( i );

sizeof 是静态运算符,它的结果在编译时刻就已经确定了。

不要在 sizeof 的括号里做运算,这些运算不会做的。


5.整数


第5周:数据类型——5.1 数据类型_第3张图片

整数的内部表达:计算机内部一切都是二进制。

18:00010010      0:00000000


6.如何表示负数(二进制负数——补码)


第5周:数据类型——5.1 数据类型_第4张图片


7.整数的范围

第5周:数据类型——5.1 数据类型_第5张图片


8. unsigned

如果一个字面量常数想要表达自己是 unsigned ,可以在后面加 u 或 U 。

用 l 或 L 表示 long 。


9.整数越界

第5周:数据类型——5.1 数据类型_第6张图片


10.整数的输入输出

只有两种形式:int 或 long long

%d :int                      %ld : long long

%u : unsigned          %lu : unsigned long long

当我们把所有小于 int 的变量传给 printf 的时候,编译器会把这些变量转换为 int 传进去。


11. 8进制和 16进制

一个以 0 开始的数字字面量是 8 进制。一个以 0x 开始的数字字面量是16进制。

%o 用于8进制 %x 用于16进制。编译器会替你转换,计算机内永远为二进制。

8 进制和 16 进制只是如何把数字表达为字符串,与内部如何表达无关。


12.选择整数类型

没有特殊需要,就选择 int 。


13.浮点数

第5周:数据类型——5.1 数据类型_第7张图片
靠近0但不包括0,有那么一小片区域是我们无法表达的

inf 表示超过范围的浮点数,nan 表示不存在的浮点数。

带小数点的字面量是 double 而非 float。float 需要用 f 或 F 后缀表明身份。

用 fabs( f1-f2 ) < 1e-12 判断相等。带小数点的数不准确,需要换为整数。

如果没有特殊需要,只使用 double 。

第5周:数据类型——5.1 数据类型_第8张图片
%e 为科学计数法

浮点数输出精度:在%和 f 之间加上  .n 可以指定输出小数点后几位。这样的输出是做四舍五入的。

浮点运算没有精度。


14.字符类型

char 是一种整数,也是一种特殊类型:字符。

用字符串表示的字符字面量:‘a’ ‘i’ ‘l’  '' 也是一个字符

printf 和 scanf 用 %c 来输入输出字符。

第5周:数据类型——5.1 数据类型_第9张图片


第5周:数据类型——5.1 数据类型_第10张图片
前者%d读掉空格,后者字符读空格

字符计算:一个字符加一个数字得到 ASCII 码表中的那个数之后的字符,两个字符的减,得到它们在表中的距离。

第5周:数据类型——5.1 数据类型_第11张图片


15.逃逸字符

用来表达无法印出来的控制字符或特殊字符。它由一个反斜杠 “\” 开头,后面跟上另一个字符,这两个字符结合起来,组成了一个字符。

第5周:数据类型——5.1 数据类型_第12张图片

制表位:一个 \t 使得输出从下一个制表位(作用类似于tab)开始,用 \t 才能使得上下两行对齐。


16.自动类型转换

当运算符的两边出现不一致的类型时,会自动转换成较大的类型。

对于printf ,任何小于 int 的类型会被转换成 int ; float 会被转换成 double ,但 scanf 不会。

不可以以整数形式输入 char ,必须输入一个整数,再交给 char 类型。


17.强制类型转换

要把一个量强制转换成另一个类型(通常是较小的类型)。(类型) 值

注意这时的类型安全性,小的变量不总能表达大的变量。

强制转换的优先级高于四则运算。

你可能感兴趣的:(第5周:数据类型——5.1 数据类型)