更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

C语言--变量与数据类型转换

  • 发布:C++培训
  • 来源:资料库
  • 时间:2017-10-24 15:37

一.引入

我们先来看一个表达式:

a=3;

什么是常量,什么是变量,什么是运算符,什么表达式。

上面这个语句中,‘3’是常量。 ‘=’是运算符。‘a’是变量。而'a=3'这个完整的就是一个表达式。

上面整个表达式的含义:就是将常量‘3’赋值给‘a’这个变量。

我们今天主要来谈谈变量,就是a。

二变量是什么

那么变量究竟是什么呢?一个字母‘a’为什么就成为了变量呢?

变量就是内存设备里一段连续的存储空间(类似于一个盒子,用来存储数据)。

目前,严格来说,‘a’目前还算不是一个变量。因为它没有经过变量三要素的洗礼。

三、变量的三要素

int a;

上面这个语句,就包含变量的三要素。

# 变量类型。

2.a 变量名 。

# a;变量的定义。

下来我们详细解释一下

a:变量的类型

在计算机里,所有的存储数据都是0/1。而且存储的资源也是有限的。为了存储不同种类(整数,实数,字符),不同大小的数据,人们将数据人为分为不同的数据类型。并且对每种类型规定了所占用内存空间的大小,以及数据和0/1之间的转换方式。

b:变量名

以下是一些变量名中必须遵守的规则

1.只能以英文字母、下划线( _ )、美元符号( $ )开头。后面可以接数字、英文字母、下划线和美元符号( $ )

2.不能是C语言中的关键字

3.变量名最好做到见名知义的程度

4.变量名不要和函数名一样

c:变量的定义

还是以int a ;为例子来说

这句变量命名的意思就是:申请一段内存大小为4字节的存储空间,其中数据的存储方式和解释为补码,并将段内存空间起名为a

深入了解变量

我们需要深入了解以下的知识

1:十进制数与二进制数的转换

2:原码、补码

3:为什么整形变量会溢出

我们先来说进制转换的问题:

将十进制转换为二进制,将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取将除得的余数,即换算为二进制数的结果

举个例子来看:52(10) = 110100(2进制)

那么如果一个数是小数或者负数呢?这时候该怎么办呢

我们先来说小数:

对被转换的小数乘以2,取其整数部分(0或1)作为二进制小数部分,取其小数部分,再乘以2,又取其整数部分作为二进制小数部分,然后取小数部分,再乘以2,直到小数部分为0或者已经去到了足够位数。每次取的整数部分,按先后次序排列,就构成了二进制小数的序列

然后我们来说负数:

最高为位1,表示负数,其余位表示数据

这个意思就是,负数的二进制还是按照他自己的绝对值去写,然后在最前面写1就行

举个例子:(8位表示二进制)

52:00110100(原)

-52:10110100(原)

然后我们来谈谈补码(为什么有补码呢?因为在计算机的问题上,原码显然是不够用的)

我们先来说一下补码的表示方法:

当数据为正数时:补码 = 原码

当数据为负数时:原码最高位不变(1),其余位按位取反,末尾加1

用8字节表示52和-52的原码

52:00110100(原) ~ 00110100(补)

-52:10110100(原) ~ 11001011(取反)~ 11001100(补)

接下来我们说说整形变量的溢出

先计算int的表示范围int占用4b的内存,就是32位。那么32位表示正数最大值为:01111111 11111111 11111111 11111111() = 2147483647的32位表示负数最大值为:10000000 00000000 00000000 00000000 = -2147483648为什么会溢出呢2147483647 + 1 = 10000000000000000000000000000000

打印出来就是个负数了

Believe

接下来我们谈谈类型转换

类型转换

数据类型之间的转换分为自动类型转换和强制类型转换。顾名思义,前者是编译器自动完成的,后者是程序员强制将数据类型进行转换。

一:自动类型转换

当同一句语句或表达式如果使用了多种类型的变量和常量(类型混用)会发生这个情况

他的规则如下:

double ←── float 高

long

unsigned

int ←── char,short 低

关于上面的流程的解释:

1.图中横向箭头表示必须的转换,如两个float型数参加运算,虽然它们类型相同,但仍要先转成double型再进行运算,结果亦为double型。纵向箭头表示当运算符两边的运

2.算数为不同类型时的转换,如一个long 型数据与一个int型数据一起运算,需要先将int型数据转换为long型, 然后两者再进行运算,结果为long型。所有这些转换都是由系统自动

进行的, 使用时你只需从中了解结果的类型即可。这些转换可以说是自动的。

其他情况下的自动类型转换

1.在程序中将数据用printf函数以指定格式输出时,当要输出的盐据类型与输出格式不符时,便自动进行类型转换

2.赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。

3.函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。

4.函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数

二:强制类型转换

需要将一个表达式转换成指定类型会发生,规则是:强制类型转换是通过类型转换运算来实现的。其一般形式为: (类型说明符) (表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型

举个例子来说就是

#include<stdio.h>

int main (void)

{

float b=3.1415;

double a = (int)b;

printf("a=%lf,

b=%lf\n",a,b);

return 0;

}

上面这段代码会输出:a=3.000000,b=3.141500


预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C++的那些事:容器和泛型算法
下一篇:超详细!C语言学习环境搭建

超全的C语言标识符知识

C指针——指针类型转换

C指针——指针和结构类型的关系

C指针——数组和指针的关系

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省