不匹配的转换
来源:互联网 发布:圣诞布置 知乎 编辑:程序博客网 时间:2024/04/29 12:52
近期通过对c的复习回顾,忽然感到以前学习到的c的知识真是少之又少,比如对于不匹配的转换进行输出时我以前只是知道会输出错误数据,但是对于错误数据的由来却是没有深究。这次通过对c的进一步的复习使我对c有个更深刻的认识。
一,不匹配的转换
/*一些不匹配的整数转换*/#include<stdio.h>#define PAGES 336#define WORDS 65618int main(void){short num=PAGES;short mnum=-PAGES;printf("num as short and unsigned short :%hd %hu\n",num,num);printf("-num as short and unsigned short :%hd %hu\n",mnum,mnum);printf("num as int and char :%d %c\n",num,num);printf("WORDS as int,and char :%d %hd %c\n",WORDS,WORDS,WORDS);return 0;}结果:/*一些不匹配的整数转换*/
输出结果:
num as short and unsigned short :336 336
-num as short and unsigned short :-336 65200
num as int and char :336 P
WORDS as int,and char :65618 82 R
第一行看到%hd和%hu产生336最为变量num直接输出,没问题。但是第二行中,mnum的%u的输出结果则为65520,而不是我们期望的336,这是因为short int为2个字节,使用2的补码的方法表示有符号的整数,其中0~~32767代表他本身,而数字32768~~65525则代表负数,65535代表-1,65534代表-2……依次类推。因此-336用65535-336,也就是65200表示。所以在被解释成有符号整数时,65200代表-336。
第三行显示试图把一个大于255的值转换成字符输出,由于short占用2字节,char占用1个字节,当输出336时,只能采用截断方式(截断相当于用256除一个整数取余),也就是80.即字符P。
第四行中期望输出比系统允许的最大的short(32767)大的整数(65618),亦是进行模运算,相当于用65536除后取余余数,余数为82,且由于负数的存储方法没在32767~~65536之间的余数会被打印成负数,且余数为82,即字符R。
- 不匹配的转换
- C语言不匹配转换
- Jackson框架转换时间格式不匹配的问题
- 检查不匹配的tag
- 类型不匹配:不能从 Iterator 转换为 HTMLDocument.Iterator
- 数据类型不匹配时最好使用强制类型转换
- c++ char/int cin获取转换不匹配问题,
- 类型不匹配引发的一个issue
- 不匹配一个字符串的正则
- 1.2.6 不匹配的代价
- 检测到"_ITERATOR_DEBUG_LEVEL"的不匹配项
- ios 代理类别不匹配的警告
- error LNK2038: XXXXX 不匹配的原因
- error LNK2038: '_ITERATOR_DEBUG_LEVEL'不匹配的解决办法
- insmod不匹配问题的解决
- 数据类型不匹配引起的bug
- error LNK2038 RuntimeLibrary 不匹配的解决
- VS2010 _ITERATOR_DEBUG_LEVEL 不匹配的编译错误
- matlab基础知识总结
- 《从0到1》读书笔记第5章“后发优势”第1记:刘翔还没过终点呢!
- Codeforces_round296_Playing with Paper
- C/C++语言——数据类型
- 程序员面试智力题
- 不匹配的转换
- 【蓝桥杯】PREV-5 错误票据
- HDU(1050)——Moving Tables
- [python]将中缀表达式(infix)转换为后缀表达式(postfix)
- U3D 小球跟随鼠标在地上滚动(一)
- string::reserve函数
- Linux硬链接和软链接的区别
- 如何用nfs命令烧写内核和文件系统(网络下载文件到nandflash)(未完)
- Xcodewin的快捷键