目录
- 6.1数据类型
-
- 6.1.1数据类型:C语言有哪些是基础数据类型,sizeof可以做什么
- 6.1.2数据类型:除了int,还有多少整数类型
- 6.1.3整数的内部表达式:整数是如何表达的,尤其是负数如何表达的
- 6.1.4整数的范围:如何推断整数类型所能表达的范围,越界了会咋样
- 6.1.5整数的格式化:如何格式化输入输出整数,如何处理8进制和16进制
- 6.1.6选择整数类型:没有什么特殊需求只用int就好了
- 6.1.7浮点类型:double 和float,它们是什么,如何输入输出
- 6.1.8浮点的范围与精度:浮点数到底能表达哪些数
- 6.1.9字符类型char是整数也是字符
- 6.1.10逃逸字符:反斜杠开头的字符是特殊的控制字符
- 6.1.11类型转换如何在不同类型之间做转换
- 6.2其他运算:逻辑,条件,逗号
-
- 6.2.1逻辑类型:表示关系运算和逻辑运算的结果的量
- 6.2.2逻辑运算:对逻辑量进行与,或,非,运算
- 6.2.3条件运算与逗号运算
6.1数据类型
6.1.1数据类型:C语言有哪些是基础数据类型,sizeof可以做什么
C有类型的语言
C语言的变量,必须:
在使用前定义,并且
确定类型
C以后的语言向两个方向发展:
C++/java更强调类型,对类型的检测更严格
javaScript,Python,PHP不看重类型,甚至不需要事先定义
类型安全
支持强类型的观点认为明确的类型有助于尽早发现程序中的简单错误
反对强类型的观点认为过于强调类型迫使程序员面对底层实现,而非事务逻辑
总的来说,早期语言强调类型,面向底层的语言强调类型
C语言需要类型,但是对类型的安全检查并不足够
C语言的类型
整数
char short int long longlong
浮点数
float double longdouble
逻辑
bool
指针
自定义类型
类型有何不同
类型名称:int long double
输入输出时的格式化:%d,%ld,%lf
所表达的数的范围:char<short<int<float<double
内存中所占据的大小:1个字节到16个字节
内存中的表达形式:二进制数(补码),编码
sizeof
是一个运算符,给出某个类型或变量在内存中所占据的字节数
sizeof(int)
sizeof(i)
是静态运算符,它的结果在编译时刻就决定了
不要在sizeof的括号里做运算,这些运算不会做的
6.1.2数据类型:除了int,还有多少整数类型
整数
char:1字节(8比特)
short:2字节
int:取决于编译器(CPU),通常的意义是“1个字”
long:取决于编译器(CPU),通常的意义是“1个字”
long long:8字节
6.1.3整数的内部表达式:整数是如何表达的,尤其是负数如何表达的
整数的内部表达
计算机内部一切都是二进制
18—>00010010
0—>00000000
-18—>?
如何表示负数
十进制用“-”来表示负数,在做计算的时候
加减是做相反的运算
乘除时当做正数,计算完毕后对结果的符号取反
二进制负数
1个字节可以表达的数
00000000----11111111(0-255)
三种方案:
1.仿照十进制,有一个特殊的标志表示负数
2.取中间的数为零,如100000000表示0,比它小的是负数,比它大的是正数
3.补码
补码
考虑负一,我们希望负一加一等于零。如何能做到?
0—>0000 0000
1—>0000 0001
11111111+00000001=100000000
因为0-1—>-1所以,-1=
(1)00000000-00000000—>11111111
11111111被当做纯二进制看待时,是255,被当做补码看待时是-1
同理,对于-a,其补码就是0-a,实际是2的n次方-a,n是这种类型的位数
6.1.4整数的范围:如何推断整数类型所能表达的范围,越界了会咋样
数的范围
对于一个字节(8位),可以表达的是:00000000-11111111
其中
00000000—>0
11111111~10000000—>-1 ~ -128
00000001~01111111—>127
整数的范围
char:1个字节 -128~127
short:2字节-32768~32767
int:取决于编译器,通常的意义是“1个字”
long 4个字节
long long 8个字节
unsigned
在整型类型加上unsigned使得它们无符号的整数
内部的二进制表达没变,变的是如何看待它们
如何输出
11111111
对于char,是负一
对于unsigned是255
如果一个字面量常数想