首页 > 试题广场 >

通过试验的方法(即编写带有此类问题的程序)观察系统如何处理整

[问答题]

通过试验的方法(即编写带有此类问题的程序)观察系统如何处理整数上溢、浮点数上溢和浮点数下溢的情况。

推荐
#include<stdio.h>
int main(void)
{
 unsigned int a=4294967295;
 float b=3.4E38;
 float c=b*10;
 float d=0.1234E-2;
 printf("%u+1=%u\n",a,a+1);
 printf("%e*10=%e\n",b,c);
 printf("%f/10=%f\n",d,d/10);
 return(0);
}

发表于 2018-05-05 21:30:44 回复(0)
整型:
基本整形(int):一般占据2个或者4个字节,这都是由编译系统决定的。在计算机中整型数据一般是按补码的形式存储的;

短整型(short int):分配2个字节。存储方式与基本整形相同,一个短整型的数据范围是:-32768-32767,即 -215 ~ (215 - 1);

长整型数据(long int):分配它4个字节,范围为 -231 ~ (231 - 1);

无符号长整型数据(unsigned long int):分配它4个字节,范围为 0 ~ 4294967295,即 0 ~ (232 - 1);

双长整型(long long int):在vc中系统给它分配8个字节,这种数据类型一般比较少用。

整数溢出:当达到最大值时,将会溢出到起始点;当达到最小值时,将会从最大点开始往变小方向溢出

#include<stdio.h>
#include<math.h>

int main(){
    //int 类型在32位机器中通常为32位
    int zhengshu1,zhengshu2;    
    unsigned int zhengshu3;
    zhengshu1=2147483647;
    zhengshu2=-2147483647;
    zhengshu3=4294967295;

    //整数的上溢,直接从-2147483648开始
    printf("%d\t%d\t%d\n",zhengshu1,zhengshu1+1,zhengshu1+2);

    //下溢也从-2147483648开始
    printf("%d\t%d\t%d\n",zhengshu2,zhengshu2-1,zhengshu2-2);

    //无符号整数上溢从0开始
    printf("%u\t\t%u\t\t%u\n",zhengshu3,zhengshu3+1,zhengshu3+2);

    return 0;
}
图片说明

浮点型:
float类型的数以指数和尾数部分来储存,例如以浮点形式存储π,内存中大致如下[+][ .314159 ][ 1 ],即[符号][尾数][指数]。
浮点数上溢:超过浮点数的最大表示范围,即发生上溢。通常最大为3.4E38
浮点数下溢(underflow):
低于一个正常的浮点值,即发生下溢。通常最小正浮点数为1.4E-45
浮点数上溢时,被赋予一个无穷大的值,printf函数显示的是inf。
浮点数下溢时,指数部分已经达到最小值,计算机只好将尾数部分进行右移,空出首位的二进制数,丢弃最后一位的二进制数(精度损失)
以十进制为例,把一个4位有效数字的数(如,0.1234E-10)除以10,得到的结果是0.123E-10.虽然得到了结果,但是在计算过程中却损失了原本尾有效位上的数字。这种情况叫做下溢(underflow)。C语言把损失了类型全精度的浮点值称为低于正常的浮点值。因此,把最小的正浮点数除以2将得到一个低于正常的值。如果除以一个非常大的值,会导致所有位都为0。
编辑于 2019-01-11 17:45:39 回复(0)

短整型(short int):分配2个字节。存储方式与基本整形相同,一个短整型的数据范围是:-32768-32767,即 -2^15 ~ (2^15 - 1);

长整型数据(long int):分配它4个字节,范围为 -2^31 ~ (2^31 - 1);

无符号长整型数据(unsigned long int):分配它4个字节,范围为 0 ~ 4294967295,即 0 ~ (2^32 - 1);

发表于 2020-02-09 09:49:45 回复(0)