数据类型与变量

1. 数据类型的介绍

在C语言中,数据类型用于声明变量或函数的返回类型,以及定义函数参数的类型。C语言中的数据类型可以分为以下几类:

1.1 基本数据类型(Basic Data Types)

1.1.1 整形(Integer Types)

①int:常用的整数类型,通常占用4个字节(32位)。
②short:短整型,通常占用2个字节(16位)。
③long:长整型,通常占用4个字节或更多。
④long long:长长整型,通常占用8个字节。
⑤signed 和 unsigned:用于指定整数类型的符号性。

1.1.2 浮点型(Floating-point Types)

①float:单精度浮点型,通常占用4个字节。
②double:双精度浮点型,通常占用8个字节。
③long double:扩展精度浮点型,通常占用10个字节或更多。

1.1.3 字符型(Character Type)

char:通常占用1个字节,可表示ASCII字符。

1.1.4 派生数据类型(Derived Data Types)

① 数组(Array): 用于存储相同类型的多个数据元素。

int numbers[5] = {1, 2, 3, 4, 5}; // 声明一个包含5个整数的数组

结构体(Structure): 用于存储不同类型的数据元素。

struct Person {
    char name[20];
    int age;
};
struct Person person; // 声明一个结构体变量

共用体(Union): 用于在同一内存位置存储不同类型的数据。

union Data {
    int i;
    float f;
    char str[20];
};
union Data data; // 声明一个共用体变量

枚举(Enumeration): 用于定义一组具有命名值的常量。

enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
enum Weekday today = Monday; // 声明一个枚举类型的变量
1.1.5 空类型(Void Type)

void:用于指示函数没有返回值,或指针没有指向任何特定类型的数据。

void printMessage() {
    printf("Hello, World!\n");
}

2.  数据类型的取值范围

在C语言中,有符号(signed)和无符号(unsigned)是用来描述整数类型的符号性质的概念。

有符号(signed): 有符号整数类型可以表示正数、负数和零。在有符号整数中,最高位用来表示符号,0表示正数,1表示负数。有符号整数的范围包括正数、负数和零,但负数和正数的数量并不对称,因为负数要多留一个表示。

无符号(unsigned): 无符号整数类型仅能表示非负整数,包括零。在无符号整数中,所有的位都用来表示数值,因此无符号整数的范围是从0开始一直到最大值,没有负数。

例如,对于8位整数类型:有符号整数的范围通常是从-128到127(如果使用补码表示)或者从-127到128(如果使用反码表示)。无符号整数的范围通常是从0到255。

有符号整数(signed):

   符号位
      ↓
   1 1 1 1 1 1 1 1   1 0 1 0 1 0 1 0
  -|-----------------|----------------
   ...               -3   -2   -1    0
无符号整数(unsigned):

   0 1 1 1 1 1 1 1   1 0 1 0 1 0 1 0
  -----------------|----------------
   ...             253 254  255

以下是常见数据类型在C语言中的取值范围(假设使用补码表示有符号整数):

2.1 整形(Integer Types)


①signed char:-128 到 127
②unsigned char:0 到 255
③short 或 short int:-32768 到 32767
④unsigned short 或 unsigned short int:0 到 65535
⑤int:-2147483648 到 2147483647
⑥unsigned int:0 到 4294967295
⑦long 或 long int:-2147483648 到 2147483647
⑧unsigned long 或 unsigned long int:0 到 4294967295
⑨long long 或 long long int:-9223372036854775808 到 9223372036854775807
⑩unsigned long long 或 unsigned long long int:0 到 18446744073709551615

2.2 浮点型(Floating-point Types)
 


①float:通常为6位有效数字,取值范围取决于实现
②double:通常为10位有效数字,取值范围取决于实现
③long double:通常为10位有效数字或更多,取值范围取决于实现

在不同的系统和编译器中,这些取值范围可能会有所不同。

3. 变量

3.1 变量的创建

在C语言中,要创建一个变量,需要指定变量的名称和数据类型。创建变量的一般语法格式如下:

data_type variable_name;

其中,data_type 是变量的数据类型,variable_name 是变量的名称。下面是一些创建变量的示例:

整型变量示例:

int age; // 创建一个名为 age 的整型变量

浮点型变量示例

float salary; // 创建一个名为 salary 的浮点型变量

字符型变量示例

char grade; // 创建一个名为 grade 的字符型变量

数组变量示例:

int numbers[5]; // 创建一个名为 numbers 的包含5个整数的数组变量

3.2 变量的分类

在C语言中,变量可以根据其存储位置、作用域和生存期进行分类。主要的变量分类包括:

1.局部变量(Local Variables): 局部变量是在函数或代码块内部声明的变量。它们只能在声明它们的函数或代码块内部访问。局部变量在函数或代码块执行结束后会被销毁,它们的生存期仅限于其所在的函数或代码块。

2.全局变量(Global Variables): 全局变量是在函数外部声明的变量,通常位于程序的顶部。全局变量可以被程序中的所有函数访问,生存期从程序启动到程序结束。全局变量在整个程序执行期间都存在,因此它们的值在程序的不同部分是可见的。

3.静态局部变量(Static Local Variables): 静态局部变量与普通局部变量类似,但其作用域仅限于声明它们的函数内部。静态局部变量在函数执行结束后并不被销毁,而是保留其值直到下一次调用该函数。静态局部变量的声明通常带有 static 关键字。

4.静态全局变量(Static Global Variables): 静态全局变量是在函数外部声明,但带有 static 关键字的全局变量。静态全局变量的作用域仍限于声明它们的文件,但是它们不可以被其他文件访问。

5.寄存器变量(Register Variables): 寄存器变量是使用 register 关键字声明的变量,用于请求编译器将其存储在寄存器中以加快访问速度。然而,编译器并不一定会将其存储在寄存器中,因此 register 关键字在现代编译器中的作用已经不如以前显著。

4. 算数操作符

C语言中常用的算术操作符包括加法、减法、乘法、除法和取模运算。下面是这些算术操作符的使用方法和示例:

加法操作符(+): 用于将两个数相加。

int result = a + b;

减法操作符(-): 用于将一个数减去另一个数。

int result = a - b;

乘法操作符(*): 用于将两个数相乘。

int result = a * b;

除法操作符(/): 用于将一个数除以另一个数。如果两个操作数都是整数,则结果也是整数;如果其中一个操作数是浮点数,则结果会自动转换为浮点数。

int result1 = a / b;   // 整数除法,结果为整数
float result2 = a / b; // 整数除以浮点数,结果会自动转换为浮点数
float result3 = (float)a / b; // 强制类型转换,将整数转换为浮点数再相除

取模操作符(%): 用于求两个数相除的余数。

int remainder = a % b;

5. 单目操作符

单目操作符是一种只作用于一个操作数的操作符,常见的单目操作符包括取地址运算符、取值运算符、递增运算符和递减运算符等。下面是常见的单目操作符及其用法:

取地址运算符(&): 用于获取变量的地址。

int x = 10;
int *ptr = &x; // ptr 指向变量 x 的地址

取值运算符(*): 用于获取指针所指向地址上的值。

int x = 10;
int *ptr = &x;
int value = *ptr; // value 等于变量 x 的值,即 10

递增运算符(++): 用于将变量的值增加 1。

int x = 10;
x++; // 现在 x 的值为 11

递减运算符(--): 用于将变量的值减少 1。

int x = 10;
x--; // 现在 x 的值为 9

取反运算符(~): 对二进制数的每一位取反。

int x = 5; // 二进制表示为 0000 0101
int y = ~x; // y 的值为 -6,二进制表示为 1111 1010

逻辑非运算符(!): 对布尔值取反,即如果操作数为真,则结果为假;如果操作数为假,则结果为真。

int x = 10;
int y = !x; // y 的值为 0,因为 x 不为零,逻辑非结果为假

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值