[問題] 只能使用邏輯運算子和遞迴的加法

看板C_and_CPP作者 (沒有存在感的人)時間9年前 (2015/01/01 03:43), 編輯推噓16(16036)
留言52則, 21人參與, 最新討論串1/2 (看更多)
各位好,我在看成大資工進階嵌入式系統開發與實做 (2014 年秋季 ) 課程說明 http://fr.slideshare.net/jserv/embedded2014 裏面有兩個c基本問題: 1. 只能使用邏輯運算子和遞迴,在C程式中實做兩個整數的加法 void add(int a, int b) { ... } 2. 使奇偶位的位元相互交換,儘量用最短的程式碼 (bit 0 <-> bit 1; bit 2 <-> bit 3; bit 4 <--> bit 5 以此類推) #include <stdint.h> int32_t swap_even_odd_bits(uint32_t x) { ... } 在下雖然出社會多年但是居然對這種題目完全沒頭緒.... 可以請高手指點該如何做嗎? (不需要完整解答亦可,但是拜託來點hint...) 感謝感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 90.41.3.11 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1420055026.A.BC0.html

01/01 03:45, , 1F
第一題是要做個加法器?
01/01 03:45, 1F

01/01 03:58, , 2F
似乎是不能有"+"的加法器...
01/01 03:58, 2F

01/01 08:36, , 3F
http://ideone.com/ryZl63 不推,不要浪費時間去上比較好
01/01 08:36, 3F

01/01 09:06, , 4F
學過數位邏輯的加法器嗎
01/01 09:06, 4F

01/01 11:17, , 5F
int add(int a, int b) {
01/01 11:17, 5F

01/01 11:17, , 6F
if (b == 0) return a;
01/01 11:17, 6F

01/01 11:17, , 7F
return add(a ^ b, (a & b) << 1);
01/01 11:17, 7F

01/01 11:17, , 8F
} // 第一題是很常見的考題
01/01 11:17, 8F

01/01 11:55, , 9F
用組語寫,咬我啊
01/01 11:55, 9F

01/01 13:22, , 10F
永遠都有難倒人的題目
01/01 13:22, 10F

01/01 13:59, , 11F
(某數 & 0x010101)就抽出奇數位元,<<左旋
01/01 13:59, 11F

01/01 16:51, , 12F
第二題看起來可以一行解決
01/01 16:51, 12F

01/01 17:03, , 13F
第二題的一行解已經在 BombCat 貼的連結內了
01/01 17:03, 13F

01/01 17:06, , 14F
取出奇數位得使用 0x55555555,得用 0b 才是二進制表示
01/01 17:06, 14F

01/01 19:55, , 15F
add numbers without plus operator
01/01 19:55, 15F

01/01 22:56, , 16F
0x010101 是 0b010101 才對吧XD
01/01 22:56, 16F

01/02 04:00, , 17F
這種和現實工作脫節的題目根本不用浪費時間去寫它
01/02 04:00, 17F

01/02 22:11, , 18F
如果你的工作是寫組語貨單晶片,這根本沒有脫節
01/02 22:11, 18F

01/02 23:18, , 19F
看一下推文 再看一下誰開的課 恩...
01/02 23:18, 19F

01/02 23:51, , 20F
只好召喚老師踹共了
01/02 23:51, 20F

01/03 01:46, , 21F
我只想問個問題,為啥^和&算是邏輯運算子?
01/03 01:46, 21F

01/03 01:49, , 22F
我印象中&和^不是位元運算子嗎?
01/03 01:49, 22F

01/03 01:50, , 23F
對位元做邏輯運算
01/03 01:50, 23F

01/03 08:33, , 24F
課程說明已說,鎖定的對象是高產值的工作職務和研究議題
01/03 08:33, 24F

01/03 08:34, , 25F
當然不是為了 8051 等級或者組裝軟硬體就能出貨的工作
01/03 08:34, 25F

01/03 08:36, , 26F
我在業界工作十餘年,感覺太多人故步自封,出這些題目,
01/03 08:36, 26F

01/03 08:37, , 27F
只是讓同學們思考不一樣的切入點,當然,這顯然不是最有效
01/03 08:37, 27F

01/03 08:37, , 28F
的學習方式,但大學教育本來就是多元,我們有責任讓學生
01/03 08:37, 28F

01/03 08:38, , 29F
體驗到嵌入式系統的多個面向,並且勉勵同學探究高產值的
01/03 08:38, 29F

01/03 08:39, , 30F
的公司或研究單位,到底都在關注哪些議題 -- by 授課教師
01/03 08:39, 30F

01/03 08:42, , 31F

01/03 08:43, , 32F
資訊科技產業面試模擬和工作咨詢收錄了相關的題目和面試
01/03 08:43, 32F

01/03 08:43, , 33F
策略的建議,歡迎各位朋友善加使用,大家多交流學習
01/03 08:43, 33F

01/03 08:46, , 34F
@wtchen: 感謝指正,這簡報用詞不精確,燒後會修正
01/03 08:46, 34F

01/03 08:49, , 35F
jserv 好有心
01/03 08:49, 35F

01/03 12:32, , 36F
還不錯的腦力激盪,期待更多題目分享
01/03 12:32, 36F

01/03 14:35, , 37F
推 jserv 大神
01/03 14:35, 37F

01/03 15:11, , 38F
推文召喚到宅色夫 XD
01/03 15:11, 38F

01/03 17:32, , 39F
老師好<(_ _)>
01/03 17:32, 39F

01/03 19:38, , 40F
真的召喚到老師了...
01/03 19:38, 40F

01/04 22:13, , 41F
說神來,神就來了...
01/04 22:13, 41F

01/05 18:24, , 42F
老師好,請問有打算弄成開放式課程或放上coursera嗎?
01/05 18:24, 42F

01/05 18:25, , 43F
(身為社會人士很難去旁聽阿...)
01/05 18:25, 43F

01/05 18:30, , 44F
如果需要經費,我雖然家無恆產但是願意盡棉薄之力
01/05 18:30, 44F

01/05 23:46, , 45F
原po要不要直接寄信問看看?slides第一頁有email~
01/05 23:46, 45F

01/05 23:46, , 46F
這問題其實很多人都有在FB上問過XD
01/05 23:46, 46F

01/07 01:08, , 47F
剛剛試著寫過一次發現居然對了.... 好感動 (?
01/07 01:08, 47F

01/07 01:27, , 48F
想問一下 return b == 0 ? add( a^b, a&b) : a^b ;
01/07 01:27, 48F

01/07 01:42, , 49F
更正 !=
01/07 01:42, 49F

01/07 01:42, , 50F
這樣的寫法好嗎 @@?
01/07 01:42, 50F

01/07 01:48, , 51F
糟糕 測試不夠 現醜了 QQ
01/07 01:48, 51F

01/07 02:14, , 52F
return b == 0 ? a|b : add( a^b, (a&b)<<1);
01/07 02:14, 52F
文章代碼(AID): #1Kf57ol0 (C_and_CPP)
文章代碼(AID): #1Kf57ol0 (C_and_CPP)