c语言基础4

1.数据类型

数据类型分为内置类型和自定义类型。

1.内置类型:字符型、整型、浮点型、布尔类型。

2.自定义类型:数组、结构体、枚举、联合体。

字符型:

char
[signed] char
unsigned char

 

整型:1.短整型、2.整型3.长整型

short [int]
[signed] short [int]
unsigned short [int]
int
[signed] int
unsigned int
long [int]
[signed] long [int]
unsigned long [int]

浮点型:

float
double
long double

布尔类型:在c语言中0表示假,非零表示真。

_Bool
这个内型使用时需要包含头文件:

2.类型区别

1.每一种内型都有自己的长度,运用不同的数据内型,创建长度不同的变量。变量长度不同,存储的数据范围就会有差异。

2.那么我们怎么知晓它们的长度呢?此时我们就要知道一个新的知识sizeof操作符,它是一个关键字,也是操作符,是用来专门计算内型长度的,单位是字节。

3.sizeof的使用

c语言基础4_第1张图片 计算int类型的长度
结果为:
c语言基础4_第2张图片 int类型长度为4字节

 

注意:

1. sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。

2.sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。

3.sizeof 的计算结果是 size_t 类型的。

4.sizeof的返回值,c语言之规定是无符号整数,并没有规定是具体类型,是由系统自己去决定的,在不同系统上返回值可能不同。

5.sizeof中的表达式不计算:

c语言基础4_第3张图片 sizeof计算长度

思考一下结果会是什么呢? 

c语言基础4_第4张图片

答对了吗?所以说sizeof是不会计算表达式的。

6.sizeof不计算表达式的原因 

sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在
程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。

3.signed 和 unsigned

在上面的数据内型中我们看到了这两个词,那么它们是啥意思呢?

其实它们都是关键字,signed表示一个类型带有正负号,包含负值。而unsigned表示类型不带正负号,只能表示0和正整数。

然而在c语言中默认int类型是带有正负号的,也就是说int 等同于signed int。

这种情况signed一般都是省略不写的。但是写了也不算错。

若想表示无正负号,这时就需要加上unsigned关键词来声明变量。

这样做有个好处就是同样的长度的内存能够表示的最大整数值,增大一倍。

例如:

  16位的 signed short int 的取值范围是:-32768~32767,最⼤是32767;⽽
unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。  
下⾯的定义是VS2022环境中,limits.h中相关定义。
1.#define SHRT_MIN (-32768) //有符号16位整型的最⼩值
2.#define SHRT_MAX 32767 //有符号16位整型的最⼤值
3.#define USHRT_MAX 0xffff //⽆符号16位整型的最⼤值
4.#define INT_MIN (-2147483647 - 1) //有符号整型的最⼩值
5.#define INT_MAX 2147483647 //有符号整型的最⼤值
其实unsigned int 的int可以省略,即unsigned int a;=unsigned a;

4.char内型也可以设置signed和unsigned。

1.signed char c; // 范围为 -128 到 127
2.unsigned char c; // 范围为 0 到 255
在这里需要注意:
C 语⾔规定 char 类型默认是否带有正负号,由当前系统决定。
这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是
unsigned char

c语言基础4_第5张图片

你可能感兴趣的:(c语言,开发语言)