[问题] 溢位

楼主: revanchist (revanchist)   2021-09-20 20:33:46
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
int x;
int y;
int h;
x=9*52*47+3*68*47+1*68*52;
y=68*52*47;
h=100*100*100;
k=1000000;
printf("\nx=%d, y=%5d, h=%10d,k=%d\n", x,y,h,k);
return 0;
}
输出的x,y,h,k 竟然溢位
这是怎么回事
作者: nh60211as   2021-09-20 20:37:00
你用什么编译器,还有k没宣告
楼主: revanchist (revanchist)   2021-09-20 20:55:00
turbo c++ 3.0
作者: nh60211as   2021-09-20 20:57:00
看网络上说Turbo C++的int只有16 bit,那当然会溢位
作者: Schottky (顺风相送)   2021-09-20 21:00:00
为什么会出现 Turbo C++ 3.0,我穿越到哪一年了?
作者: chuegou (chuegou)   2021-09-20 21:09:00
Dr. strange on duty
楼主: revanchist (revanchist)   2021-09-20 21:22:00
改成 long int 也一样
作者: Schottky (顺风相送)   2021-09-20 21:27:00
你那个年代的 CPU 要开保护模式才有 32-bit 可以用Turbo C 就不支援保护模式指令啊https://www.codeblocks.org/ 你看得见这个网站吗?下载这个 Code::Blocks 来编译就不会溢位了
楼主: revanchist (revanchist)   2021-09-20 21:51:00
现在的CPU也不能使用turbo c++ ˇ3.0的32-bit?
作者: Schottky (顺风相送)   2021-09-20 22:26:00
这样说好了,Turbo C 根本不认识新的 CPU 也无法使用新CPU 的功能,因为他根本就不晓得怎么用其实有点好奇为什么会想用上个世纪的编译器有什么特殊的苦衷吗?
楼主: revanchist (revanchist)   2021-09-21 13:33:00
使用codeblocks int也是2 bytes怎么解决?
作者: ctrlbreak   2021-09-21 15:28:00
自己实做大数运算
作者: dces4212 (flawless)   2021-09-21 16:33:00
看一下data model。codeblock可能用到原本的编译器。另,你在啥平台?
作者: fatrabitree (胖兔子)   2021-09-21 18:33:00
int32_t int16_t
作者: Schottky (顺风相送)   2021-09-21 18:37:00
Turbo C 还能用什么平台?但是你究竟用什么平台?
作者: closer76 (克楼瑟)   2021-09-21 19:07:00
其实我觉得就算在 TC++, long 应该也是 4 bytes. 虽然 DOS 是 16 位元的作业系统,TC++ 编出来的也是真实模式的机器码,但还是有办法用软件实作 32-bit 数值运送的但,都已经 2021 年了,拜托别再用 TC++ 了
作者: lc85301 (pomelocandy)   2021-09-21 19:35:00
改用 python 就好了
楼主: revanchist (revanchist)   2021-09-21 20:22:00
codeblocks 用到原来的编译器, 索以才会出现这个错误
作者: Lipraxde (Lipraxde)   2021-09-21 20:49:00
有些课程用比较古老的教材就需要用古老的 compiler
作者: closer76 (克楼瑟)   2021-09-21 21:36:00
那教材也太古老了,要学这种东西不如不要学。
作者: Schottky (顺风相送)   2021-09-21 21:51:00
楼上太激动了点,但现代多的是免费新教材,何必看旧书?就算去地区公立图书馆也不难借到新一点的 C 语言书籍
作者: Lipraxde (Lipraxde)   2021-09-21 22:03:00
学校教材就用旧的啊,学生又控制不了XD不过也还好吧,了解一些过去精美的程式写法我觉得不算坏事。
作者: closer76 (克楼瑟)   2021-09-22 00:32:00
所以我感慨的就是学校居然还用这么旧的教材。TC++ 是我快30年前唸大学时用的编译器。只用了不到一年,就改用BC++3.1。我记得那年就有在说TC++3.0版本太旧、有bug...在20几年前就被认为过时的东西,为什么现在还叫学生用?现在免费的编译器那么多,支援最新的C/C++语法,重点是编辑器、除错器比当年TC/BC的IDE强上几百倍,为何不用?再来,我不认为旧的东西不好。我这几年也很痴迷一些老技术,像是8-bit时代的绘图技巧。但TC++3.0绝对跟“精美”两字无缘。如果老师真的要教DOS时代的技术,然后教 DOSextender 之类的东西,我就无话可说。
作者: Schottky (顺风相送)   2021-09-22 01:16:00
了解历史上的精美技巧应该是基础打稳之后才要做的事然而教材过旧的状况却常常出现在高中职电脑课另一个我不满的点是 Turbo C 或 VC 6.0 都是要付费的明明有新的免费开发环境,却硬要用盗版品究竟有什么毛病(30年前很少学校有软件也要采购的概念,现在则早已停售)
作者: closer76 (克楼瑟)   2021-09-22 09:23:00
同意。又不是新的东西太贵买不起,更何况盗版本身就错的
作者: zxzx8059 (zxzx8059)   2021-09-22 21:07:00
10年前学校就用dec-c++或是后面用免费的vs…
作者: steve1012 (steve)   2021-09-23 11:41:00
真的学新的就好
作者: Lipraxde (Lipraxde)   2021-09-23 11:42:00
我遇到需要用 TC 的是研究所课程啦,但也就其中一两堂需要而已,主要也不是在教基础的程式。至于说教材过旧嘛...要教的道理都是通的,也没很严重?
作者: pponywong (pony)   2021-09-23 11:45:00
现在用TC几乎都是看real mode的asm code了现在教assembly code也不一定是必要了尤其是64-bit CPU上的assembly code 根本太复杂了
作者: alan23273850   2021-09-26 11:16:00
这篇文我看下来好好笑 哈哈哈
作者: F04E (Fujitsu)   2021-09-28 12:36:00
干 都民国110年了还在用Turbo C++ 3.0Visual Studio Community 免费
作者: espresso1   2021-10-28 16:21:00
MASM 6跟VC 6我还真的买过

Links booklink

Contact Us: admin [ a t ] ucptt.com