[問題] 溢位

作者: 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