C语言中的数据类型及其转换
计算机中的数据类型
计算机中的数据以二进制的形式存储在寄存器或存储器中。
机器怎么知道这些数据是定点数还是浮点数?
如果是定点数,是有符号数还是无符号数?
事实上,汇编语言中的数据类型取决于指令操作码。
存储在寄存器、存储器中的操作数本身没有数据类型,对该数进行何种数据类型的操作完全取决于指令。同一个操作数,既可以当作有符号数,也可以当作无符号数;既可以是定点数,也可以是浮点数。
高级语言具有数据类型,下面以C语言为例子介绍。
C语言中整型变量的取值范围:
以char(8位)型变量为例
无论是无符号数还是有符号数,C语言程序并不检测数据在加、减、乘等运算中产生的溢出现象。程序员应尽量避免出现这种情况,所编制的应用程序应具有对溢出进行判断的功能。
C语言中不同类型的数据可以互相进行强制类型转换。基本转换原则是尽量保持数的真值不变。
C语言中数据类型转换包括:
- 整型数据之间的转换
- int、float、double之间的转换
整型数据之间的转换
char、short、int、long 这4种整型数据的表示范围不一样,很可能数据转换后精度缺失,此时就只能尽量保持转换前后的机器码相同或机器码部分相同。
C语言中整型数据的转换包括:
- 相同字长之间的转换
- 小字长转大字长
- 大字长转小字长
相同字长之间的转换
以char类型为例:
有如下C语言程序段:
short si = -32767;
unsigned short usi = si;
执行上述两条语句后,usi的值为(D)。
A. -32767
B. 32767
C. 32768
D. 32769
【2019年题13】考虑以下C语言代码:
unsigned short usi = 65535;
short si = usi;
执行上述程序段后,si的值为(A)。
A. -1
B.-32767
C.-32768
D.-65535
小字长转大字长
- 原数据为无符号类型,进行0扩展
- 原数据为有符号类型,进行符号扩展
【2012年题13】假定编译器规定int和short类型长度分别为32位和16位,执行下列c语言语句
unsigned short x = 65530;
unsigned int y = x;
得到y的机器数为(B)。
A. 0000 7FFAH
B. 0000 FFFAH
C.FFFF 7FFAH
D. FFFF FFFAH
大字长转小字长
一般情况下:编译器会将机器码截短处理
- 表示范围缩小
- 很可能出错
整型数据之间的转换对比总结:
int、float、double之间的转换
int、float、double之间也可以进行强制类型转换。
上述3种类型数据的机器码并不相同(int型数据是32位有符号整数,用补码表示;float和double型数据分别是32位和64位浮点数,它们的阶码用移码表示、尾数用原码表示)。
上述3种类型数据的表示范围和精度也不相同。
因此在转换过程中编译器只能保证数值尽量相等,大多数情况下只是近似值。下面,我们讨论以下几种转换情况。
float->double, double->float, float/double->int, int->float,int->double
float->double
由于double型数据的阶码和尾数的位数都比float型大,因此其表示范围更大、精度更高,转换后的double型数据与原float型数据的值完全相等。
double->float
- 大数转换:可能发生溢出。例如:double d=1234567890123456; float f =(float)d;
- 高精度数转换:发生舍入。例如:double d=1.123456789;float f (float) d;
float/double->int
- 小数部分:向0方向截断
- 大数转换:可能发生溢出
int->float
两种类型都是32位,各自的数据组合(状态)数量相同,但二者在数轴上表示的数据并不完全重叠。
由于float型浮点数的尾数包括隐藏位在内共24位,当int型数据的高8位(24~31位)数据为非0时,无法精确转换成24位浮点数的尾数,此时发生精度溢出。
int->double
double型数据的尾数包含隐藏位在内有53位,可以精确表示所有32位整数。
总结:
推荐阅读:
欢迎关注公众号:愚生浅末
C语言中的数据类型及其转换的更多相关文章
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...
- JS中的数据类型和转换
一.JS中的数据类型 js中的数据类型可以分为五种:number .string .boolean. underfine .null. number:数字类型 ,整型浮点型都包括. string:字符 ...
- js中的数据类型及其转换
Js中的数据类型 Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 一,number Number数据类型指的是数字,可以为整型, ...
- js中的数据类型以及转换
Js中的数据类型 Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 一,number Number数据类型指的是数字,可以为整型, ...
- C语言中各个数据类型的取值范围
因为CPU的差异,各系统中的数据类型所占的字节数(bytes)不同,二进制位数(bit)也不同.那么怎样才能知道自己系统的数据类型的字节数,位数呢? 授之以鱼不如授之以渔,大家可以自己从电脑里获取这些 ...
- C语言中格式化输出的转换说明的fldwidth和precision解析
首先说什么是C语言的格式化输出,就是printf和它的几个变种(grep -E "v?(sn|s|f)printf").像这些函数都有一个参数format,format中可以加点转 ...
- 在C语言中基本数据类型所占的字节数
基本数据类型所占的字节数其实跟C语言本身没有太大的关系,它取决于编译器的位数,下面这张表说明了不同编译器下基本数据类型的长度: 32位编译器中各基本类型所占字节数: 注:对于32位的编译器,指针变量的 ...
- python语言中的数据类型之字典
数据类型 字典类型dict 用途:记录多个值,列表是索引对应值,而字典是key对应值,其中key对value有描述性 定义方式:在{ }用逗号分隔开多个元素,每个元素都是key:value形式,其中k ...
- 2_C语言中的数据类型 (七)printf与scanf
1 字符串格式化输出和输入 1.1 字符串在计算机内部的存储方式 字符串是内存中一段连续的char空间,以’\0’结尾 “”是C语言表达字符串的方式 1.2 ...
- 2_C语言中的数据类型 (四)整数与无符号数
1.1 sizeof关键字 sizeof是c语言关键字,功能是求指定数据类型在内存中的大小,单位:字节 sizeof与size_t类型 1.1 int类型 1.1.1 ...
随机推荐
- ubuntu 使用natapp配置内网穿透
前言 在自己的服务器上起了服务,但由于域名还没申请下来,无法使用域名测试微信公众号接口,辛亏看到了这个博客:Natapp内网穿透服务工具.跟随这篇博客,我搭建了自己的内网穿透服务,现在记录如下. 过程 ...
- yb课堂实战之首页banner轮播图和视频详情接口开发 《四》
开发轮播列表接口 VideoMapper.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCT ...
- 可视化学习:如何用WebGL绘制3D物体
在之前的文章中,我们使用WebGL绘制了很多二维的图形和图像,在学习2D绘图的时候,我们提过很多次关于GPU的高效渲染,但是2D图形的绘制只展示了WebGL部分的能力,WebGL更强大的地方在于,它可 ...
- 开源免费又好用的中式数据报表:UReport2是一款高性能的架构在Spring之上纯Java报表引擎,通过迭代单元格可以实现任意复杂的中国式报表。
北润乾.南帆软,数加发力在云端. uReport 身何安?中式报表真开源. 报表江湖之中,uReport安身立命的产品品类定位是什么? 说来很简单,uReport的价值在于填补了这样一个市场空白:开源 ...
- django 计算两个TimeField的时差
在 Django 中,你可以使用 datetime 模块来计算两个 TimeField 字段的时间差.以下是一个示例: from datetime import datetime, timedelta ...
- ComfyUI进阶:Comfyroll插件 (四)
ComfyUI进阶:Comfyroll插件 (四) 前言: 学习ComfyUI是一场持久战,而Comfyroll 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供更加丰富和专业 ...
- C语言基础要点
C语言基础 C语言基础 C程序编译过程 C程序编译步骤 汇编语言 32关键字 数据类型 常量 size程序 类型限定 goto语句 指针 指针和字符串 作用域 函数 内存 进程内存结构 可执行文件结构 ...
- 解决: Cannot load information for github.com
问题在共享项目至idea时候出现:I am getting this error while sharing on GithHub in Intellije IDEA : Cannot load in ...
- Django 文件导入实现方案
Django文件导入实现方案 by:授客 QQ:1033553122 开发环境 Win 10 Python 3.5.4 Django-2.0.13.tar.gz 官方下载地址: https ...
- Django template层之json报文遍历总结
Django template层之json报文遍历总结 by:授客 QQ:1033553122 测试环境 Win7 Django 1.11 实例 Views.py def home(request): ...