01_第一章_数据类型_02_变量的类型决定了什么

变量的类型决定了什么

高级语言为什么要区分数据类型

  1. 为了更有效地组织数据,规范数据的使用
  2. 有助于提高程序的可读性,方便用户使用

在程序设计语言中引入数据类型的好处

  1. 带来了程序的简明性和数据的可靠性。
  2. 有助于提高程序的执行效率,节省内存空间

C语言的数据类型

基本类型

  1. 整型
    • 基本整型: int
    • 长整型: long
    • 短整型:short
    • 无符号整型:在前面三种整型数据类型之前增加一个unsigned关键字,就变为相应的无符号整型
  2. 实型(浮点型)
    • 单精度实型:float
    • 双精度实型:double
    • 长双精度实型:long double
  3. 字符型
  4. 枚举类型

构造类型

  1. 数组类型
  2. 结构体类型
  3. 共用体(联合)类型

指针类型和空类型

变量的类型决定了什么

  1. 占用空间的大小
  2. 数据的存储形式
  3. 合法的表数范围
  4. 可参与的运算种类

不同类型的变量占用的内存不同

整型
  1. int: 基本整型
    • 对于其占用的内存空间,C标准并没有规定,这和系统有关,和计算机的字长有关,通常int类型所占用内存的大小为一个字长。目前的大多数系统上int占用4个字节。
  2. short int,简写为short: 短整型
    • 占用2字节
  3. long int, 简写为long: 长整型
    • 占用4字节
  4. unsigned: 无符号整型(正整数和0)
    • 用来修饰int, shortlong
实型
  1. float: 单精度实型

    • 占用4个字节
  2. double: 双精度实型

    占用8字节

  3. long double: 长双精度实型

    • IEEE规定为10字节,但是实际上很多编译器没有遵循这一规则,所以这个类型的变量占用的内存也是和系统相关
字符型

char: 字符型

  • ​ 占用1字节
注意

由上面的内容可知,C语言中,有的类型的变量所占用的字节数是和系统相关的,因此绝不能对于变量所占用的内存字节数想当然

如何计算变量或类型所占内存的大小
使用sizeof运算符
  1. sizeof运算符是一个一元运算符,用于计算变量或类型占用内存的大小

  2. 语法

    语法形式 运算结果
    sizeof(类型名) 这种类型的变量在内存中所占用的内存字节数
    sizeof(变量或表达式) 变量或者是表达式的结果所属类型所占用的内存字节数
sizeof运算符的好处
  1. 增加程序的可移植性
  2. sizeof运算符是编译时执行的运算符,所以使用该运算符不会导致程序运行时间的额外开销

不同类型的数据表数范围不同

  1. 不同类型的表数范围不同
  2. 有符号和无符号类型的表数范围也不同
    • 有符号整数的最高位为符号位
    • 无符号整数的最高位为数据位
    • 有符号整数所能表示的最大整数仅为无符号整数所能表示的最大整数的一半

不同类型数据的存储形式不同

整型数
  1. short类型(占用2字节)为例

  2. 一个short类型的数据使用二进制表示如下

    image-20200630102854428

  3. 由于计算机的内存是一维线性排列的,并且一个单元为一个字节

  4. 因此,将这样的一个2字节的数据存放到内存中就有两种存储的方式

  5. 小端次序

    • 存放形式如下

      image-20200630103409349

    • 这种存放形式的好处

      • 便于计算机从低位字节向高位字节进行运算
  6. 大端次序

    • 存放形式

      image-20200630103553869

    • 好处

      • 与人们从左到右的书写顺序相同,便于对字符串的处理
实型数
  1. 如何存储一个实型数的关键是确定小数点的位置

  2. 实型数的表示方法

    • 小数形式
    • 指数形式,也就是科学计数法
  3. 只有小数部分或者只有整数部分的实型数成为定点数

    • 定点数的小数点位置固定
    • 只有整数部分的定点数叫做定点整数
    • 只有小数部分的定点数称为定点小数(纯小数)
  4. 定点数的表示

    • 定点数通常用小数形式来进行表示

    • 定点小数:小数点位于符号位和最高数值位之间

      image-20200630155628109

    • 定点整数:小数点位于数值位的最低位

      image-20200630155641754

  5. 小数点位置不固定的实型数称为浮点数

  6. 浮点数以科学计数法的方式表示,这样就可以分别用一些位表示指数部分和小数部分

  7. 浮点数实现小数点位置浮动的原理

    • 将实数拆分为==阶码(Exponent)尾数(Mantissa)==两个部分分别进行存储。如下图所示

      image-20200630160322977

    • 对于同样的尾数,阶码的值越大,则浮点数所表示的数值就越大

    • 对于同样大小的存储单元,用于存储阶码的位数越多,则能表数的范围就越大,但是相应的用于存储尾数的位就变少了,这时候表数的精度就会变差

  8. 在计算机中,通常用定点数来表示整数和纯小数;而用浮点数来表示既有整数又有小数的实数

字符型数据
  1. 字符型数据是指那些英文字母、数字以及控制字符等
  2. 在C语言中,字符型数据以二进制编码的形式进行存储,一个字节保存一个字符
  3. 字符的编码方式
    • 取决于计算机系统所采用的字符集
    • ASCII字符集是一个我们常用的字符集
    • 根据字符集,每一个字符具有一个编码值,这个值可以使用二进制的整数进行表示
    • 因此,一个字符常数,实际上就是一个普通的整数

不同的数据类型可参与的运算不同

整型

加减乘除和取余

实型

加减乘除

字符型
  1. 加减
  2. 对于字符型数据的运算,实际上是对表示字符的整数进行运算。对于ASCII字符集,也就是对字符的ASCII值的运算
指针类型

加减和比较运算

END

热门文章

暂无图片
编程学习 ·

2.7 网络抓包

1.简介 抓包是指对网络传输中发送与接收的数据包进行拦截、重发、编辑和转存的操作。 在开发网络爬虫时,给定URL,开发者必须清楚客户端是如何向服务器发送请求的,以及客户端发出请求后服务器返回的数据是什么。只有了解这些内容,开发者才能在程序中拼接URL,针对服务返回的…
暂无图片
编程学习 ·

mysql查询练习1篇

mysql查询练习1篇 学生表 学号 姓名 性别 出生日期 所在班级 create table student( sno varchar(20) primary key, sname varchar(20) not null, ssex varchar(10) not null, sbirthday datetime, class varchar(20) ) ENGINE=innoDB DEFAULT CHARACTER SET=utf8 ;教师表 教…
暂无图片
编程学习 ·

8080端口被占怎么办 ,解决方法

用后端springboot启动,8080端口 报错 8080 in use 打开 控制台 win+R 输入 cmd 进入后输入netstat -ano 肉眼能找到找就完事了如果找不到 输入netstat -aon|findstr “8080”找到最后一列的那个数字 “26252”, 就是PID 码 然后打开系统的 任务管理器 ,你要是任务管理器都不…
暂无图片
编程学习 ·

线程同步

多线程同步 1)为什么需要多线程同步? 一块资源被多个线程同时操作的时候,当没有人任何操作,每个线程不知道什么时候开始执行什么时候结束,所以最终程序的运行结果会跟预想的不同 2)临界资源 临界区 临界资源:同一时刻只能够允许一个线程去访问的资源 临界区:访问临界资…
暂无图片
编程学习 ·

CSS滚动指示器

一、CSS滚动指示器 滚动指示器指的是页面的顶端会有一个进度条,指示滚动的进度。效果如下GIF所示(点击播放):CSS滚动指示器指的是不借助JavaScript,纯CSS实现滚动进度效果。 二、传统的实现方法 传统CSS实现方法由一个名叫 Mike的人首先提出,时间应该是16年,这个CodePen…
暂无图片
编程学习 ·

Explicit Model Predictive Control of a Magnetic Flexible Endoscope

对胶囊的动力学进行建模,能更好的对胶囊进行控制,在已知胶囊预定义轨迹的情况下,对胶囊进行预测控制和定位。 一个磁灵活内窥镜的显式模型预测控制 Explicit Model Predictive Control of a Magnetic Flexible Endoscope [1] Paper Link Authors: Scaglioni, Bruno, et al. …
暂无图片
编程学习 ·

scala写入读取本地文件操作

def write(fileName: String)(datas: Array[String]): Unit = {val writer = new PrintWriter(new File(fileName))println("--------数据写入--------")for (s <- datas) { // println(s)writer.write(s + "\n")}writer.close()}/*** 数据读取** …
暂无图片
编程学习 ·

解决Docker无法停止的方法

导读在本篇文章里小编给大家整理了关于docker容器无法stop的解决办法,有需要的朋友们可以参考下。解决方法如下:1、强制删除容器docker rm -f jenkins2、清理此容器的网络占用docker network disconnect --force bridge jenkins docker 无法stop,kill容器最近在遇到docker无…
暂无图片
编程学习 ·

【C】猜数字游戏

#include<stdio.h> int main(){int random,N,urname;int count;scanf("%d %d\n", &random, &N);scanf("%d", &urname);//先判断大与小两种情况 for(count=1;urname>0&&count<=N; count++){if(random<urname)printf(&qu…
暂无图片
编程学习 ·

Leetcode—437路径总和II

题目描述给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。…
暂无图片
编程学习 ·

firewalld管理方式

1.firewalld的开启 systemctl stop iptables systemctl disable iptables systemctl mask iptables systemctl unmask firewalld systemctl enable --now firewalld2.关于firewalld的域trusted 接受所有的网络连接home 用于家庭网络,允许接受ssh mdns ipp-client samba-clie…
暂无图片
编程学习 ·

java学习笔记6

1,找出最大元素的最小下标值 double max = myList[0]; int indexofMax = 0; for (int i=0;i<myList.length;i++){if(myList[i] > max){max = myList[i];indexofMax = i;} }用一次循环就找到了最大值,每次循环都将得到的较大数,在下一次循环中与新加入的数比较,在循环结…
暂无图片
编程学习 ·

论面向服务架构设计及其应用

在准备架构师考试过程中发现可供参考的论文范围非常少且内容陈旧给学习带来很大烦恼,通过考试后把我准备的论文共享出来水平有限但内容格式迎合考试,希望给大家一个参考。范文以“论面向服务架构设计及其应用”为题书写,希望对大家有所帮助。【摘要】2017年5月,我参加了某省…
暂无图片
编程学习 ·

CentOS系统Docker搭建MySQL服务(解决Docker MySQL无法输入中文问题)

MySQLMySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。 MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。Docker 搭建MySQL服务…
暂无图片
编程学习 ·

A1076 Forwards on Weibo (30) 图的遍历BFS

本题思路 考虑转发,且有层数(即转发最多通过几个非直接follows),所以考虑用BFS,因为BFS不涉及递归之类的,所以要用Node设置layer值。 #include<cstdio> #include<iostream> #include<vector> #include<queue> #include<cstring> using nam…
暂无图片
编程学习 ·

Ubuntu18.04 安装Autoware过程中出现的问题

Autoware安装过程参考了几位大大的教程,都已经非常详细,而且也提供的好多避坑指南。请在确定仔细阅读以下链接后,明确了安装过程和目标,明确了要装的显卡驱动和cuda版本后,再开始安装。 这是断断续续装了一周的痛苦和感悟… 主要参考-主线安装: 官方指南 补充参考一 补充…
暂无图片
编程学习 ·

AlexNet模型简介

2012年AlexNet在ImageNet竞赛中以超过第二名10.9个百分点的绝对优势一举夺冠,自此,深度学习和卷积神经网络一举成名,一直火到了今天。模型组成输入层5个卷积层3个全链接层从上图还可以看到网络有两个分支,这是因为当时硬件条件有限,一块GPU显存不够,所以使用了两块GPU分别…
暂无图片
编程学习 ·

URLDecoder和URLEncoder的使用

一.为什么要使用URLDecoder和URLEncoderURLDecoder和URLEncoder它的作用主要是用于普通字符串和application/x-www-form-rulencoded MIME字符串之间的转换当URL地址里包含非西欧字符的字符串时,系统会将这些非西欧转换成特殊字符串,那么编码过程中可能涉及将普通字符 串和这种…