long long int 溢出问题,求指导

weixin_42382299 2018-06-04 03:03:07
#include "stdafx.h"
#include<stdio.h>
#include<math.h>
int main() {
int bytes_of_int;
int bits_of_int;
int biggest_of_int;
bytes_of_int = sizeof(int);
bits_of_int = bytes_of_int * 8;
biggest_of_int = pow(2, bits_of_int - 1) - 1;
printf("There are %d bytes in a int,equals %d bits,and it can signify %d at most.\n", bytes_of_int, bits_of_int, biggest_of_int);
printf("When overflow ,%d\n", biggest_of_int + 1);

short int bytes_of_short_int;
short int bits_of_short_int;
short int biggest_of_short_int;
bytes_of_short_int = sizeof(short int);
bits_of_short_int = bytes_of_short_int * 8;
biggest_of_short_int = pow(2, bits_of_short_int - 1) - 1;
printf("There are %hd bytes in a short int,equals %hd bits,and it can signify %hd at most.\n", bytes_of_short_int, bits_of_short_int, biggest_of_short_int);
printf("When overflow ,%hd\n", biggest_of_short_int + 1);

long int bytes_of_long_int;
long int bits_of_long_int;
long int biggest_of_long_int;
bytes_of_long_int = sizeof(long int);
bits_of_long_int = bytes_of_long_int * 8;
biggest_of_long_int = pow(2, bits_of_long_int - 1) - 1;
printf("There are %ld bytes in a long int,equals %ld bits,and it can signify %ld at most.\n", bytes_of_long_int, bits_of_long_int, biggest_of_long_int);
printf("When overflow ,%ld\n", biggest_of_long_int + 1);

long long int bytes_of_long_long_int;
long long int bits_of_long_long_int;
long long int biggest_of_long_long_int;
bytes_of_long_long_int = sizeof(long long int);
bits_of_long_long_int = bytes_of_long_long_int * 8;
biggest_of_long_long_int = pow(2, bits_of_long_long_int - 1) - 1;
printf("There are %lld bytes in a long long int,equals %lld bits,and it can signify %lld at most.\n", bytes_of_long_long_int, bits_of_long_long_int, biggest_of_long_long_int);
printf("When overflow ,%lld\n", biggest_of_long_long_int + 1);
long long int biggest_of_long_long_int_test = 9223372036854775807;
printf("%lld\n", biggest_of_long_long_int_test);
printf("%lld\n", biggest_of_long_long_int_test + 1);
getchar();
return 0;
}
...全文
1521 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42382299 2018-06-04
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
pow函数的参数是double类型,double类型的有效数字个数是15 而 2^63=9223372036854775807 其有效数字个数已经超过15
谢谢!祝你明天没有BUG!
赵4老师 2018-06-04
  • 打赏
  • 举报
回复
pow函数的参数是double类型,double类型的有效数字个数是15 而 2^63=9223372036854775807 其有效数字个数已经超过15
赵4老师 2018-06-04
  • 打赏
  • 举报
回复
2^63-1=9223372036854775807
weixin_42382299 2018-06-04
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
浮点数格式 http://bbs.csdn.net/topics/390676437
好像不是有关浮点数的问题,整型溢出。 long long int bytes_of_long_long_int; long long int bits_of_long_long_int; long long int biggest_of_long_long_int; bytes_of_long_long_int = sizeof(long long int); bits_of_long_long_int = bytes_of_long_long_int * 8; biggest_of_long_long_int = pow(2, bits_of_long_long_int - 1) - 1; 好像是这段代码没有取得long long int的上限值。并且直接产生了溢出,biggest_of_long_long_int = pow(2, bits_of_long_long_int - 1) - 1;最后的-1好像没有生效。
weixin_42382299 2018-06-04
  • 打赏
  • 举报
回复
引用 3 楼 wang0635 的回复:
编译器老点了吧?
新下载的VS2017,应该不会出问题吧?
赵4老师 2018-06-04
  • 打赏
  • 举报
回复
wang0635 2018-06-04
  • 打赏
  • 举报
回复
编译器老点了吧?
weixin_42382299 2018-06-04
  • 打赏
  • 举报
回复
图片倒数第四行,long long int 上限出了问题。同样的代码,用在short int ,int, long int,上没有出现问题,请问这个错误的结果是出在了哪里?
weixin_42382299 2018-06-04
  • 打赏
  • 举报
回复

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧