急求:溢出问题

发布网友 发布时间:2024-10-21 14:26

我来回答

6个回答

热心网友 时间:2024-11-27 02:13

用int 溢出,说明你的编译器里面int是16位的,即2个字节.最高位是符号位.那么表示的最大范围是-32768~32767
而50*50*50在运算的时候,会不断的进位,导致最高位符号位变成非0.这个时候正数就变成了负数,产生了那样的结果.溢出的结果也不是随机的,而是如果计算的结果的二进制码超过了它的长度(比如你的编译器的int是2字节16位),超出的部分它不会再记录了.如果这个时候最高位符号位是1,那么就会显示一个负数给你.
你可以测试不同数据类型的字节长度.
比如 printf("%d\n",sizeof(int));你可以获得你的机器上编译器int的字节数.

热心网友 时间:2024-11-27 02:15

#include<stdio.h>
void main()
{

short x = 50*50*50;
int y = 50*50*50;
printf("x:%d\n",x);
printf("y:%d\n",y);
printf("x:%x\n",x);
printf("y:%x\n",y);
}

x:-6072
y:125000
x:ffffe848
y:1e848

说明你的编译器里面int是16位的即4个16进制位
x:ffffe848
y:1e848

e848 == e848

故不是随机的

热心网友 时间:2024-11-27 02:13

溢出的结果一般都是随机的

热心网友 时间:2024-11-27 02:17

用的是什么编译器?

热心网友 时间:2024-11-27 02:12

int变量范围 是32768-32767
你超过32767则 计算公式为-(x-32767)

热心网友 时间:2024-11-27 02:13

用long int

long int x;
x=50*50*50;
printf("%ld\n",x);

热心网友 时间:2024-11-27 02:14

用int 溢出,说明你的编译器里面int是16位的,即2个字节.最高位是符号位.那么表示的最大范围是-32768~32767
而50*50*50在运算的时候,会不断的进位,导致最高位符号位变成非0.这个时候正数就变成了负数,产生了那样的结果.溢出的结果也不是随机的,而是如果计算的结果的二进制码超过了它的长度(比如你的编译器的int是2字节16位),超出的部分它不会再记录了.如果这个时候最高位符号位是1,那么就会显示一个负数给你.
你可以测试不同数据类型的字节长度.
比如 printf("%d\n",sizeof(int));你可以获得你的机器上编译器int的字节数.

热心网友 时间:2024-11-27 02:12

溢出的结果一般都是随机的

热心网友 时间:2024-11-27 02:17

int变量范围 是32768-32767
你超过32767则 计算公式为-(x-32767)

热心网友 时间:2024-11-27 02:16

#include<stdio.h>
void main()
{

short x = 50*50*50;
int y = 50*50*50;
printf("x:%d\n",x);
printf("y:%d\n",y);
printf("x:%x\n",x);
printf("y:%x\n",y);
}

x:-6072
y:125000
x:ffffe848
y:1e848

说明你的编译器里面int是16位的即4个16进制位
x:ffffe848
y:1e848

e848 == e848

故不是随机的

热心网友 时间:2024-11-27 02:11

用long int

long int x;
x=50*50*50;
printf("%ld\n",x);

热心网友 时间:2024-11-27 02:10

用的是什么编译器?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com