深入学习C语言时,有必要先了解一下数据类型的概念,以及它们之间的混合运算与类型转换。

本篇文章便是根据《C语言程序设计教程》和在线翻阅资料后整理而出。(练习题将逐步更新)

目录:

    一、概述

    二、类型修饰符

    三、各种数据类型介绍

    四、不同类型数据间的混合运算与类型转换转换

    五、练习

一、概述

程序所能处理的基本数据对象被划分成一些组或一些集合。它们都采用同样的编码方式,对它们能做同样的操作。把程序中具有这样性质的集合,成为数据类型。CPU对不同的数据类型提供了不同的操作指令

C语言中的类型按其组成可以分为简单类型和构造类型,按是否预定义了类型名字和值集可以分为基本类型和非基本类型,按是否加了类型限定符可以分为限定类型和非限定类型

用ProcessOn作图,C语言数据类型如下:

二、类型修饰符

除void类型外,基本数据类型之前都可以加各种类型修饰符,类型修饰符有如下四种:

1.signed----有符号,可修饰char、int。int是默认有符号的

2.unsigned-----无符号,修饰int 、char

3.long------长型,修饰int 、double

4.short------短型,修饰int

三、各种数据类型介绍

1.基本数据类型

(以下各数据类型字长均指32位操作系统下,可用printf("%d",sizeof(数据类型名));进行测试。具体字长由具体编译器决定,但确定的关系是:sizeof(short)≤sizeof(int)≤sizeof(long))

整型:整形包括短整型、整形和长整形

短整型:

有符号短整型:short [int]    2byte -32768~32767

无符号短整型:unsigned short [int]    2 byte 0~65535

整型:

有符号整型:int /signed [int] 4 byte -2147483648~2147483647
无符号整型:unsigned [int] 4 byte 0~4294967295

长整形:

有符号长整型:long [int]/signed long [int] 4 byte -2147483648~2147483647

无符号长整型:unsigned long [int] 4 byte 0~4294967295

超长整型(C99 标准添加的类型):long long [int]  8 byte 0~18446744073709552000

P.S(C语言中整型和长整形都占4字节的原因):

早期的C编译平台下整形和长整型分别是2和4字节。随着编译平台版本的升级,现在二者都是4字节,short是2字节。另外整型数的字长与CPU的字长没有密切关系:早期的int是2字节,但那时的CPU也已经是32位的了;再者你把现在4字节int编译平台安装在64位CPU机上去,同样只能编译4字节int的代码,并不因为CPU成8字节了,你代码中的int也成8字节了。(摘自百度知道)

long从字面上看,应该是64位才更合理,把long当成32位实在是一个历史的包袱。像C#那样新起炉灶的程序语言,由于没有需要支持老代码的问题,就把long当作64位来处理了。

在32位平台下,long是相对short而言,long(short)类型是long(short)int类型的简称,sizeof(long) = sizeof(int) = 4。int和long的范围虽然一样,但输入输出格式不同,printf int的格式为%d,而printf long的格式为%ld。

考虑到程序的可移植性,还是要将他们区分开来。但当要求的数值范围为4byte时,建议使用int类型,因为第一版的C语言只有一种类型,那就是int。(摘自百度文库)

浮点型:

单精度浮点型:float  4 byte -3.4E38~3.4E38

双精度浮点型:double 8 byte 1.7E308~1.7E308 long double 8 byte

字符型:

有符号字符型:char/signed char 1 byte -128~127 
无符号字符型:unsigned char 1 byte 0~255
宽字符型:wchar_t (unsigned short) 2 byte 0~65535
P.S:字符型赋值时可以是char c='a';也可以用字符对应的ASCII码赋值:char c=97;

2.指针类型:

有关指针的数据类型

int i ————定义整形变量i

int *p———- p为指向整型变量的指针变量

int a[n]——- 定义整型数组a,它有n个元素

int *p[n]—– 定义指针数组p,它由n个指向整型数据的指针元素组成

int (*p)[n] —p为指向含n个元素的一维数组的指针变量

int f()——— f为返回整数型函数值的元素

int *p()——- p为返回一个指针,该指针指向整型数据 或 整形数组

int (*p)() —–p为指向函数的指针,该函数返回一个整数值

int **p—- —-p是一个指针变量,它指向一个指向整数型数据的指针变量

延伸可参考:基于指针的数据类型与指针运算小结 http://www.jb51.net/article/41051.htm

3.构造类型:struct

C语言构造类型分为:数组类型,结构类型和共用体类型

数组类型:是由相同基本类型若干个元素组织在一起数据,它们有先后顺序,也可以按这个顺序对这些元素访问
            如int a[10],共有10个元素,第个元素的类型都相同,都为整型
            这10 个元素,按顺序分别是a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]

结构体类型:在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问

在C语言中,定义一个结构的一般形式为:

struct结构名

{

//成员表列

};

延伸可参考:C语言结构体(struct)常见使用方法 http://blog.csdn.net/huqinwei987/article/details/23625823

共用体类型:union

几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点

在C语言中,定义一个结构的一般形式为:

union 共用体名

{
成员表列
}变量表列;

4.空类型:void

常用在程序编写中对定义函数的参数类型、返回值、函数中指针类型进行声明。

具体参考void百科 http://baike.baidu.com/item/void/5126319?fr=aladdin

四、不同类型数据间的混合运算与类型转换

1.自动类型转换

在C语言中,自动类型转换遵循以下规则:

①若参与运算量的类型不同,则先转换成同一类型,然后进行运算

②转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算

a、若两种类型的字节数不同,转换成字节数高的类型

b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型

③所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算

④char型和short型参与运算时,必须先转换成int型

⑤在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入

2.强制类型转换

强制类型转换一般格式如下:

(类型名)(表达式)

这种强制类型转换操作并不改变操作数本身

五、练习题

(练习题将逐步更新)

参考链接:

C语言基本数据类型简介:http://www.cnblogs.com/onedime/archive/2012/11/21/2780149.html

深入解析unsigned int 和 int http://www.jb51.net/article/40518.htm

强制类型转换 http://baike.baidu.com/link?url=54pz-bWDJV2PiatUXXglxiY0pwuWVufjEyUuvl4N5k1Og7MnaohZ_lGEqboiaJVKw6l8Gy1UQOjT_DOO9R56xq

转载于:https://www.cnblogs.com/corvoh/p/5141746.html

「C语言」数据类型及混合运算与类型转换相关推荐

  1. c语言常量命名特点,「C语言」常量和变量的表示、应用和变量命名规则

    在程序运行中,其值不能改变的量成为常量. 在基本数据类型中,常量可分为整型常量.实型常量.符号常量和字符型常量(包括字符常量和字符串常量),现分别介绍如下: 目录: 一.常量 二.C语言标识符 三.变 ...

  2. C语言浮点型数据相加错误,C语言——整型和浮点型混合运算

    1. int和double混合运算 C语言int和double混合运算时,会自动将int类型的数据转换为double类型的数据,最后得到的结果也是double类型.如下例: double a=4.0/ ...

  3. matlab 数据混合运算,C++中混合运算的类型转换

    1.混合运算和隐式转换 C++中允许相关的数据类型进行混合运算. 相关类型:尽管在程序中的数据类型不同,但逻辑上进行这种运算是合理的,比如2+5.0 相关类型在混合运算时会自动进行隐式类型转换,再计算 ...

  4. 自加一运算_C语言i++、++i混合运算老手未必全掌握,看了你就明白了

    C语言中的自增自减运算符(i++.i--.++i.--i)对于新手来说,通常感到困惑,说来容易算来难,如果涉及到混合运算,更是无法理解.甚至有些学了几年的老手,未必全掌握(也许你忽略了这个问题,笔者相 ...

  5. 华人一作统一「视觉-语言」理解与生成:一键生成图像标注,完成视觉问答,Demo可玩...

    来源:机器学习研究组订阅 这个 BLIP 模型可以「看图说话」,提取图像的主要内容,不仅如此,它还能回答你提出的关于图像的问题. 视觉 - 语言预训练 (Vision-Language Pre-tra ...

  6. 「C语言」指针数组 数组指针 指针函数 函数指针

    相信很多人和我一样,有着这样的恐惧,那就是这四个玩意怎么也分不清,这都是啥啥啥啥呢?今天我们来具体分析一下.其实要具体了解这四个概念,只需要了解符号优先级,并关注最后两字,你就成功了一半. 符号优先级 ...

  7. 「易语言」cmd 执行文件命令代码

    运行 ("cmd /c start D:\安装\e\易语言5.9\e.exe", 假, ) 执行 (, "cmd.exe", "cmd /c star ...

  8. rust闪退删除什么文件_【一点资讯】「Rust语言」噢,不!我的数据科学正在Rust化...

    Python是数据科学家最流行的编程语言之一--这是有充分理由的.Python包索引(PyPI)承载了大量令人印象深刻的数据科学库包,比如NumPy.SciPy.自然语言工具包.Pandas和Matp ...

  9. 「C语言」寄存器变量与内存变量

    参考链接: 寄存器变量是什么?及它的存储种类有哪些? 静态变量.自动变量与寄存器变量的存储 寄存器变量-百度百科 前两天看师兄给的C语言的一本小册子,看到: 内存变量或寄存器变量是指进程运行过程中的变 ...

最新文章

  1. 在ASP.NET中自动给URL地址加上超链接
  2. asm java 反编译_dex-tools-2.1-SNAPSHOT 反编译Java class文件和Android dex文件到Java源码的利器 - 下载 - 搜珍网...
  3. Scrapy入门(二)创建Scrapy项目
  4. kafka简介(大数据技术)
  5. Java代理模式——静态代理动态代理
  6. 强烈推荐:给去美国的新生说几句(转载),超实用
  7. 数值分析-泰勒公式及泰勒级数
  8. java itextpdf使用HTML模板生成pdf文件,并设置table
  9. wireshark在win8.1上抓包的问题解决
  10. [设计模式-行为型]模板方法模式(Template Method)
  11. ubuntu 配置 tftp 服务器
  12. NetDevOps常用数据库python实战-MongoDB
  13. leetcode字节跳动探索
  14. GraphQL学习笔记(GraphQL + Spring boot demo) part 1
  15. 华硕飞行堡垒7按Fn+F5电脑显示屏不显示风扇模式
  16. hiho 1051 : 补提交卡
  17. 【2021 MCM】 Problem A: Fungi by 2100454
  18. 三维点云数据特征检测
  19. 数据库实验六 存储过程
  20. 【油猴脚本】忽视页面跳转拦截,自动继续访问页面

热门文章

  1. ionic常见问题及解决方案
  2. request 获取各种路径
  3. C++ Primer 7.33 练习编写成员函数
  4. SharePoint At Work----Hyperlinks in the Data View Web Part
  5. 【IneliJ 】使用IneliJ IDEA 2016将Java Web项目导出为War包
  6. Oracle分析函数三——SUM,AVG,MIN,MAX,COUNT
  7. df命令,du命令,磁盘分区
  8. Java程序员应知道的十条Java优化策略,让你的系统健步如飞
  9. discuz回贴通知插件实现-配置邮件服务器
  10. hpuoj--1093: 回文数(一)