[問題] C語言 二進位轉十進位

看板C_and_CPP作者 (阿泰)時間13年前 (2012/03/23 23:40), 編輯推噓2(2029)
留言31則, 10人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) No 問題(Question): 二進位轉十進位 輸入字元數超過10位數會變成負的 餵入的資料(Input): 11111111111 預期的正確結果(Expected Output): 2047 錯誤結果(Wrong Output): -1015 程式碼(Code):(請善用置底文網頁, 記得排版) #include<stdio.h> #include<math.h> int main() { long int input; long int i,bit; long int C_result=0; printf("Input an integer containing only 0s and 1s: "); scanf("%ld",&input); for(i=0;input!=0;input/=10) { bit=input%2; C_result=C_result + bit*pow(2,i); i++; } printf("Result of convertion is %ld \n",C_result); system("Pause"); return(0); } 補充說明(Supplement): 我覺得是int宣告的長度問題 但是我換成long int 還是無法 有請各位幫忙了~~ --

03/12 22:04,
我打簽名擋 .....
03/12 22:04

03/12 22:04,
03/12 22:04

03/12 22:04,
03/12 22:04

03/12 22:05,
檔 = = 沒帶眼睛 手字旁跟木字旁根本在婊我
03/12 22:05

03/12 22:05,
... 是眼鏡
03/12 22:05

03/12 22:06,
可以不要變成簽名檔嗎 ...
03/12 22:06
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.232.71

03/23 23:48, , 1F
何不把input直接存成字串再以char為單位處理?
03/23 23:48, 1F

03/23 23:58, , 2F
剛學沒多久 不是很清楚char如何使用@@
03/23 23:58, 2F

03/24 00:20, , 3F
long int 好像爆掉了,range沒這麼大
03/24 00:20, 3F

03/24 00:25, , 4F
我想也是 不過有其他可以不要讓他爆的宣告嗎?
03/24 00:25, 4F

03/24 00:38, , 5F
long long int
03/24 00:38, 5F

03/24 00:49, , 6F

03/24 01:00, , 7F

03/24 01:05, , 8F
0.0
03/24 01:05, 8F

03/24 01:41, , 9F
long long int 可以!!! 太強大了XDD
03/24 01:41, 9F

03/24 01:43, , 10F
看來我不適合推文y
03/24 01:43, 10F

03/24 01:59, , 11F
有用 long long 的必要嗎? 根本搞錯重點
03/24 01:59, 11F

03/24 10:05, , 12F
http://codepad.org/ZhE8x7Dh 這樣更省運算一點
03/24 10:05, 12F

03/24 10:11, , 13F
感謝L大 但是我們似乎沒教這麼多= =? 如果要到32位
03/24 10:11, 13F

03/24 10:12, , 14F
都有效 哪應該改掉甚麼 還是只能靠char來換?
03/24 10:12, 14F

03/24 10:30, , 15F
嘮叨一下,寫程式不可以說「這個我們沒教過」來當藉口
03/24 10:30, 15F

03/24 11:04, , 16F
unsign?
03/24 11:04, 16F

03/24 13:33, , 17F
j大 知道了~ 我會再研究的 謝謝指教=)
03/24 13:33, 17F

03/24 14:24, , 18F
"不要自己算" 就是最省的做法
03/24 14:24, 18F

03/24 14:26, , 19F
我寫的這些學校才沒有教
03/24 14:26, 19F

03/24 14:27, , 20F
寫那種初心者也看得懂的code是侮辱你
03/24 14:27, 20F

03/24 21:36, , 21F
L大 其實用unsigned long 去接strtoul 會比較好
03/24 21:36, 21F

03/24 21:37, , 22F
畢竟是同一個型態...
03/24 21:37, 22F

03/24 21:47, , 23F
ISO/IEC 989 6.3.1.3.1 依靠 implicit conversion 轉
03/24 21:47, 23F

03/24 21:48, , 24F
成已知 bits 數的型別, 無 padding 後續位移就不用因
03/24 21:48, 24F

03/24 21:49, , 25F
為給太多 assumptions 跑出奇怪結果自擾
03/24 21:49, 25F

03/24 21:50, , 26F
是 9899
03/24 21:50, 26F

03/24 22:01, , 27F
嗯嗯 長知識:)
03/24 22:01, 27F

03/25 00:22, , 28F
剛學的時候我用getche()寫
03/25 00:22, 28F

03/26 01:10, , 29F
但是我照L大的跑過一次 每次要求別的值就要重新輸入
03/26 01:10, 29F

03/26 01:11, , 30F
然後讓她Run 我一開始想弄的是可依照使用者輸入的值
03/26 01:11, 30F

03/26 01:11, , 31F
做輸出~
03/26 01:11, 31F
文章代碼(AID): #1FR9bh0R (C_and_CPP)