假定编译器规定char和short类型长度分别为8位和16位,执行下列C语言语句
char c = -127;
unsigned short us;
us = (unsigned short) c;
之后,us的值是多少?
这里涉及不同的数据类型转换。在CSAPP这本经典教材中,不同数据类型之间的转换实质就是对编码的重新解释。书中的原话是
▲图1
本文将数据类型转换分为两大类,一类是整型变量之间的数据类型转换,因为编码都是补码。另一类是涉及浮点类型,因其编码复杂。
C语言中,有一些整型变量类型的字长相同,如unsigned short和short。有一些整型变量类型的字长则不同,如char和short。整型变量之间的数据类型转换要抓住字长这一主要矛盾。这样一来,又将整型变量之间的数据类型转换分为两个小类,即相同字长和不同字长的类型之间的转换。
如图2所示,4位机器码,解释成有符号数和无符号数,其数值是不同的。
如下的C语言语句
short si = -32767;
unsigned short usi = si;
si的机器码是
1000 0000 0000 0001
同样的机器码,解释成无符号整数就是32769
char 、short、int、long这4种整型数据的表示范围不一样,很可能数据转换后精度缺失,此时就只能尽量保持转换前后的机器码相同或机器码部分相同。当机器字长较短的类型转为机器字长较长的类型时,若原数据为无符号类型,机器码高位进行0扩展,比如
unsigned char uc = 254;
short s = (short) uc;
uc的机器码是
1111 1110
s的机器码则需要补0
0000 0000 1111 1110
数值保持不变。
若原数据为有符号类型,机器码高位进行符号扩展,比如
char c = -127;
unsigned short us = (short) c;
c的机器码是
1000 0001
us的机器码则需要补1,因为符号位是1
1111 1111 1000 0001
数值为65409。
当机器字长较长的类型转为机器字长较短的类型时,编译器会将机器码截短处理,表示范围缩小,很可能出错。
int i = -40832;
short s = (short) i;
char c = (char)i;
i的机器码是
1111 1111 1111 1111 0110 0000 1000 0000
s的机器码则需要截断高位的16位
0110 0000 1000 0000
数值为24704。 c的机器码则需要截断高位的24位,仅保留低8位
1000 0000
数值为-128.
现有一个double类型变量 ,一个float类型变量 ,则表达式 是否成立?
int、float、double之间也可以进行强制类型转换。上述3种类型数据的机器码表示并不相同(int型数据是32位有符号整数,用补码表示;float和double型数据分别是32位和64位浮点数,它们是基于IEEE754标准的编码表示)。且3种类型数据的表示范围和精度也不相同。因此在转换过程中编译器只能保证数值尽量相等,大多数情况下只是近似值。
float类型的表示范围约为 ,而double类型的表示范围约为 ,IEEE754标准下,二者的编码结构如图3所示
时,值相同;
时,大数可能溢出,高精度发生舍入。
时,小数部分向0截断,大数可能溢出。因为int类型的范围小于float和double
时,值相同。
时,比较大的数无法精确表示。
以下是GPT的回答
如下的C语言语句
int i = 123456789;
float f = (float) i;
f的精度是否发生变化?
以下是GPT的回答
推荐两本与GPT有关的书籍
定制化GPTs(Custom GPTs)是由OpenAI推出的一种创新技术,它允许用户根据自己的特定需求和应用场景来创建定制版本的GPTs。定制化GPTs结合了用户自定义的指令、额外的专业知识以及多样化的技能,旨在为用户提供日常生活、工作或特定任务中的更多帮助和支持。 本书详细介绍了GPTs的概念、功能特点、创建第一个GPTs、指令使用技巧、知识库使用技巧,以及如何根据个人需求和应用场景创建定制化GPTs,如学习辅助类GPTs、个人成长类GPTs、办公助手类GPTs、电商和社交媒体类GPTs、短视频制作类GPTs等。 本书内容充实,语言通俗易懂,案例丰富,具有很强的可读性。它既适合初次接触AI技术的普通读者阅读,也适合有一定经验的AI从业者借鉴。此外,本书也适合那些需要了解最新ChatGPT技术动态的开发人员阅读。
本书详细介绍了如何根据个人需求和应用场景创建定制化GPTs,为各个行业的创新者开辟了新的可能性,助力了各种新应用和服务的诞生。本书从理论到实战,由浅入深,对创建定制化GPTs的方法与技术进行了全方位的介绍,为希望深入了解并应用这一前沿技术的专业人士、开发者和爱好者提供了全面的学习指导。从而根据自己的需求定制和优化GPTs。
本书分四篇,共13章,包括ChatGPT介绍、定制化GPTs基础知识、GPTs使用场景介绍、GPTs创建步骤、使用GPTs的高级定制、使用Zapier完成自动作业、搭建LOGO制作助手GPT、搭建数学学习助手GPT、搭建邮件助手GPT、搭建插图助手GPT、搭建足球比赛查询GPT、GPT Store介绍、GPT Store上架实战。
本书内容详尽,原理论述简单明了,案例丰富,内容由浅入深,具有很强的可读性。它既适合初次接触AI技术的普通读者阅读,也适合有一定经验的AI从业者借鉴。此外,本书也适合那些需要了解最新ChatGPT技术的开发人员阅读。