如果将文件中的short类型的数读出来存放在int类型的变量中会出现问题吗?

答案是:如果原来的数是一个正数的话,是不会出现问题的,如果原来的数是负数的话,那么出现的问题可就大了,为什么会这样呢,分析如下:
例如:short a=1;
那么在文件中是这样的 00000000 00000001
那么当从文件中读取两个字节并且将读取的数据保存到int类型的变量中
00000000 000000000 00000000 00000001,所以还是1,这样是没有什么问题的。
那么如果是一个负数呢?
short a=-1;
那么在文件中是这样的:
因为计算机都是存放的补码的形式,所以需要计算-1的补码
首先求原码(将原来的负数的符号去掉之后求二进制,然后最高位写1)
原码:10000000 00000001
然后求反码,反码是将原码中的0变1,1变0,并且最高位的符号为是不变的
反码:11111111 11111110
最后求补码,补码是在反码的基础上+1
补码:11111111 11111111
所以在文件中存放的-1就是这样的
然后如果将该数读取出来,存放到int类型的变量中,就会是这样的
00000000 00000000 11111111 11111111
所以打印出来就是65535了
所以从文件中读取数据对于有符号位的数据需要特别注意的是:
将数据是按照什么格式存进去的就要按照什么格式进行读出来,只有这样才能保证一定不会出现问题!
另外读取文件需要注意的是:如果是以二进制的方式(fwrite()函数)写入到文件中的,那么是不可以使用fscanf()函数进行读取的,读取会出现问题。但是反之,如果是以fprintf()函数写入到文件中的,那么以fread()的方式读取出来是没有任何问题的。

猜你喜欢

转载自blog.csdn.net/qq_36769722/article/details/79048522