下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、char型变量的有无符号类型char是C/C++整型数据中比较古怪的一个,其它的如int、long、short等不指定signed/unsigned时都默认是signed。虽然char在标准中是unsigned(因为char类型提出的初衷是用来表示ascii码,ascii码的范围是0~127),但实际情况中究竟是signed还是unsigned取决于编译器。可通过下面程序判断编译器的默认char类型:voidchar_type(){charc=0xFF;if(c==-1){printf("signed");}elseif(c==255){printf("unsigned");}Else{printf("error!");}}当你不确定编译器的默认char类型时,就用显示声明:signedchar和unsignedchar。2、char型变量与原码反码补码(1)原码反码补码1)原码原码是早期用来表示数字的一种方式:一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码。2)反码正数的反码等于其原码,负数的反码等于其原码中除符号位以外的所有位取反。3)补码正数的补码等于其原码,负数的补码等于其原码中除符号位外所有位取反(得到反码了)后,最低位加1。(2)char型变量整数在内存中是以其补码存取的,例如:127在内存中表示为01111111,-127在内存中表示为~(01111111)+1=10000001。假定某内存单元p的内容是11111111,那么它一定是255吗?实际上取决于你的代码是要把它看成有符号还是无符号数,如果是无符号则表示255,如果是有符号则表示-1【对于有符号数,最高位为符号位,1表示负,0表示正】。在C/C++语言中,char变量为一个字节,8位。signedchar表示的范围:-128~127【-128在内存中的二进制表示为10000000,127在内存中的表示为01111111】。unsignchar表示的范围:00000000~11111111,即0~255。华为软件编程规范中5-11解释代码charchr;unsignedshortintexam;chr=-1;exam=chr;//编译器不产生告警,此时exam为0xFFFF。解释反推结果,发现此编译器默认char为signed,chr的值是-1,在内存中以11111111存储。exam为16个字节长的无符号短整形数,将chr赋给exam,是先将chr根据数据类型转化规则的规则扩展后再赋给exam。对chr进行符号扩展,由于11111111的符号位为1,扩展时符号位充1,扩展为unsignedshortint的chr为11111111111111,由于exam为无符号数,所以exam为0xFFFF。3、数据类型转化规则(1)短数据类型扩展为长数据类型1)符号拓展:要扩展的短数据类型为有符号数时,进行符号扩展,即短数据类型的符号位填充到长数据类型的高字节位(即比短数据类型多出的那一部分),保证扩展后的数值大小不变。2)零扩展:要扩展的短数据类型为无符号数,进行零扩展,即用零来填充长数据类型的高字节位。(2)长数据类型缩减为短数据类型如果长数据类型的高字节全为1或全为0,则会直接截取低字节赋给短数据类型;如果长数据类型的高字节不全为1或不全为0,则转会就会发生错误。(3)同一长度的数据类型中有符号数与无符号数的相互转化直接将内存中的数据赋给要转化的类型,数值大小则会发生变化。另短类型扩展为长类型时,但短类型与长类型分属有符号数与无符号数时,则先按规则(1)进行类型的扩展,再按本规则直接将内存中的数值原封不动的赋给对方。1)有符号数的转换规则从到方法charshort符号位扩展charlong符号位扩展charunsignedchar最高位失去符号位意义,变为数据位charunsignedshort符号位扩展到short;然后从short转到unsignedshortcharunsignedlong符号位扩展到long;然后从long转到unsignedlongcharfloat符号位扩展到long;然后从long转到floatchardouble符号位扩展到long;然后从long转到doublecharlongdouble符号位扩展到long;然后从long转到longdoubleshortchar保留低位字节shortlong符号位扩展shortunsignedchar保留低位字节shortunsignedshort最高位失去符号位意义,变为数据位shortunsignedlong符号位扩展到long;然后从long转到unsigneddoubleshortfloat符号位扩展到long;然后从long转到floatshortdouble符号位扩展到long;然后从long转到doubleshortlongdouble符号位扩展到long;然后从long转到doublelongchar保留低位字节longshort保留低位字节longunsignedchar保留低位字节longunsignedshort保留低位字节longunsignedlong最高位失去符号位意义,变为数据位longFloat使用单精度浮点数表示。可能丢失精度。longdouble使用双精度浮点数表示。可能丢失精度。longlongdouble使用双精度浮点数表示。可能丢失精度。2)无符号数的转换规则从到方法unsignedcharchar最高位作为符号位unsignedcharshort0扩展unsignedcharlong0扩展unsignedcharunsignedshort0扩展unsignedcharunsignedlong0扩展unsignedcharfloat转换到long;再从long转换到floatunsignedchardouble转换到long;再从long转换到doubleunsignedcharlongdouble转换到long;再从long转换到doubleunsignedshortchar保留低位字节unsignedshortshort最高位作为符号位unsignedshortlong0扩展unsignedshortunsignedchar保留低位字节unsignedshortunsignedlong0扩展unsignedshortfloat转换到long;再从long转换到floatunsignedshortdouble转换到long;再从long转换到doubleunsignedshortlongdouble转换到long;再从long转换到doubleunsignedlongchar保留低位字节unsignedlongshort保留低位字节unsignedlonglong最高位作为符号位unsignedlongunsignedchar保留低位字节unsignedlong
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026转业军官统一考试(公共基础知识)在线复习题库含答案(广东汕尾)
- 2026年氢能行业深度分析报告
- 亚太股份Q1归母净利润同比增长42%全球化布局加速
- 转债估值调整关注高景气度方向的调仓机会
- 新零售技术驱动分析-洞察与解读
- 先进纳米材料精密测量技术-洞察与解读
- 2026年四川省物业管理师职业技能等级认定考试(理论知识中级、四级)测试题及答案
- 2026年四川省泸州市泸县第一次考试选调机关事业单位工作人员申论+行政职业能力测验复习题及答案
- 智能仓储环境下物流节点运营效率分析-洞察与解读
- 旧城改造中的社区参与与公共服务均等化实践-洞察与解读
- 《城镇燃气管网泄漏智能化巡检技术规程》TJFPA 0022-2025
- 南充市人力资源和社会保障局局属参照管理事业单位2025年度公开遴选工作人员(2人)考试参考题库附答案解析
- 海丰红宫红场
- 2025年广东省自考《审计学原理06069》真题和答案
- 品牌模型(之三)-part2
- 血行播散型肺结核护理查房
- 上海小区下水道施工方案
- 小儿人工洗胃法的护理
- 医院保洁服务体系与实施策略
- DB11T 2423-2025 城市道路挖掘与修复技术规范
- T/CNFAGS 16-2024绿色甲醇分级标准(试行)
评论
0/150
提交评论