C语言入门系列之2.数据类型、运算符和表达式(一)(上)

简介: C语言常见数据类型如下:

一、数据类型

C语言常见数据类型如下:

2345_image_file_copy_72.jpg

1.数据类型

  • 基本数据类型

基本数据类型最主要的特点是,其值不可以再分解为其他类型。

也可以说,基本数据类型是自我说明的。

  • 构造数据类型

构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。

也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或一个构造类型。

在C语言中,构造类型有以下几种:

  • 数组
  • 结构体
  • 共用体(联合)类型
  • 指针类型

指针是一种特殊的、且具有重要作用的数据类型,其值用来表示某个变量在内存储器中的地址虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。

  • 空类型

在调用函数值时,通常应向调用者返回一个函数值,这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明。

例如在上一节例题中给出的max函数定义中,函数头为int max(int a, int b);,其中int类型说明符即表示该函数的返回值为整型量。

但是,也有一类函数,调用后并不需要向调用者返回函数值,这种函数可以定义为“空类型” ,其类型说明符为void。

2.常量和变量

对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。

在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。

它们可与数据类型结合起来分类,例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。

在程序中,常量是可以不经说明而直接引用的,而变量则必项先定义后使用。

整型量包括整型常量、整型变量。

常量和符号变量

在程序执行过程中,其值不发生改变的量称为常量。

符号常量:用标示符代表一个常量。

在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。

符号常量在使用之前必须先定义,其一般形式为:

#define 标识符 常量

其中#define也是一条预处理命令(预处理命令都以#开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。


习惯上符号常量的标识符用大写字母变量标识符用小写字母,以示区别。

举例如下:

#include <stdio.h>
#define PRICE 30
void main()
{
    int num, total;
    num = 10;
    total = num * PRICE;
    printf("total=%d", total);
}

打印:

total=300

其中:

#define PRICE 30用标识符代表一个变量,称为符号变量;

符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值


使用符号常量的好处:

  • 含义清楚;
  • 能做到”一改全改“。

变量

其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。

变量定义必项放在变量使用之前,一般放在函数体的开头部分。

如下:

int k = 3;

要区分变量名和变量值是两个不同的概念,在上例中,k是变量名,3是变量值。

3.整型数据

整型常量的表示方法

整型常量就是整常数。

在C语言中,使用的整常数有八进制、十六进制和十进制三种:

  • 十进制整常数
    十进制整常数没有前缀,其数码为0-9。
    以下各数是合法的十进制整常数:
    237、-568、65535、1627等。
  • 八进制整常数
    八进制整常数必须以0开头,即以0作为八进制数的前缀,数码取值为0-7。
    八进制数通常是无符号数。
    以下各数是合法的八进制数:
    015(十进制为13)、0101(十进制为65)、0177777(十进制为65535)。
  • 十六进制整常数
    十六进制整常数的前缀为0X或0x,其数码取值为0-9、A-F或a-f。
    以下各数是合法的十六进制整常数:
    0X2A(十进制为42)、0XA0 (十进制为160)、0xFFFF (十进制为65535)。


在程序中是根据前缀来区分各种进制数的,在书写常数时不要把前缀弄错造成结果不正确。


整型常数的后缀:

在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为0-65535,有符号数为-32768 - +32767,八进制无符号数的表示范围为0 - 0177777,十六进制无符号数的表示范围为0X0 - 0XFFFF或0x0 - 0xFFFF。

如果使用的数超过了上述范围,就必须用长整型数来表示,长整型数是用后缀 L或l 来表示的。

整型变量

变量定义的一般形式为:

类型说明符  变量名标识符, 变量名标识符, ...;

例如:

int a,b,c;      // a,b,c为整型变量
long x,y;       // x,y为长整型变量
unsigned p,q;   // p,q为无符号整型变量

在书写变量定义时,应注意以下几点:

  • 允许在一个类型说明符后,定义多个相同类型的变量,各变量名之间用“,”号间隔,类型说明符与变量名之间至少用一个空格间隔。
  • 最后一个变量名之后必须以“;”号结尾。
  • 变量定义必须放在变量使用之前。
    一般放在函数体的开头部分。


整型数据在内存中的存放形式是二进制,在上例中声明k变量,值为3,以二进制存储示意如下:

2345_image_file_copy_73.jpg

补充–内存中的二进制存储:

1字节Byte = 8位bit。

数值是以补码表示的:

  • 正数的补码与原码相同;
  • 负数的补码
    将该数的绝对值的二进制形式按位取反再加1。
    举例说明–求-10的补码:


10的原码: 00001010

取反: 11110101

再加1,得到-10的补码: 11110110


可以得到,最高位是符号位,1表示负数,0表示整数。


整型变量的分类:

  • 基本型
    类型说明符为int,在内存中占4个字节。
  • 短整型
    类型说明符为short intshort,在内存中占2个字节。
  • 长整型
    类型说明符为long intlong,在内存中占4个字节。
  • 无符号型
    类型说明符为unsigned


注意:

这里占多少个字节跟具体的系统和编译器规定有关。


在本机查看不同类型所占位数测试:

#include <stdio.h>
void main()
{
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof(short));
    printf("%d\n", sizeof(long));
    printf("%d\n", sizeof(unsigned));
}

打印:

4
2
4
4

整型变量信息如下:

image.png

整型变量的定义和使用举例如下:

#include <stdio.h>
void main()
{
    int a, b, c, d;
    unsigned u;
    a = 5;
    b = -15;
    u = 12;
    c = a + u;
    d = b + u;
    printf("a+u=%d, b+u=%d\n", c, d);
}

打印:

a+u=17, b+u=-3

在编译运行时a、b、c、d与u的数据类型不一样,会自动将无符号型转化为默认类型有符号型再进行计算。


整型数据的溢出举例如下:

#include <stdio.h>
void main()
{
    short int a, b;
    a = 32767;
    b = a + 1;
    printf("%d, %d", a, b);
}

打印:

32767, -32768

显然,出现了负数-32768。

解释:在本机编译环境中,short int是2个字节16位,216=65536,65536÷2=32768,即short int有符号型的范围是 -32768-32767,而程序中b的值为32768,超出范围即溢出,其二进制为1000000000000000,此时最高位为1表示负数,所以显示了-32768。

相关文章
|
19天前
|
存储 C语言 C++
【c语言】运算符汇总(万字解析)
今天博主跟大家分享了c语言中各种操作符的功能、使用方法以及优先级和结合性,并且与大家深入探讨了表达式求值的两个重要规则--算数转换和整形提升。学习这些知识对我们的C语言和C++学习都有着极大的帮助。
81 2
|
1月前
|
C语言
c语言运算符
C的运算符有以下几种: 算术运算符:+、-、*、/、% 结合方向自左向右 关系运算符:>、<、==、>=、<=、!= 逻辑运算符:!、&&、|| 位运算符<<、>>、~、|、^、& 赋值运算符:=及符号扩展赋值运算符(+=、-=、*=、/=) 条件运算符:? : 逗号运算符:, 指针运算符:*、& 求字节运算符:sizeof 强制类型转换运算符:((类型)) 分量运算符:.、-> 下标运算符:[]
33 4
|
15天前
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
14天前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
68 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
14天前
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
37 8
|
14天前
|
C语言
【C语言】条件运算符详解 - 《 A ? B : C 》
条件运算符(也称为三元运算符)是C语言中唯一的三元运算符。它通常用于替代简单的 `if-else` 语句。
56 6
|
2月前
|
存储 C语言
【c语言】数据类型和变量
本文介绍了C语言中的数据类型和变量。数据类型分为内置类型和自定义类型,内置类型包括字符型、整型、浮点型等,每种类型有不同的内存大小和取值范围。变量分为全局变量和局部变量,它们在内存中的存储位置也有所不同,分别位于静态区和栈区。通过示例代码和图解,详细阐述了这些概念及其应用。
49 1
|
2月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
2月前
|
存储 C语言
初识C语言:常量与变量中寻找数据类型
初识C语言:常量与变量中寻找数据类型
|
14天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
34 10