发布网友 发布时间: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
用的是什么编译器?