[問題] 用 bitwise operator 把十進位轉成二進位

看板C_and_CPP作者 (君詠)時間13年前 (2011/03/13 22:48), 編輯推噓0(0017)
留言17則, 3人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev-C++, Win7 餵入的資料(Input): 3 預期的正確結果(Expected Output): 000 001 010 011 100 101 110 111 錯誤結果(Wrong Output): 000 111 000 111 000 111 000 111 程式碼(Code):(請善用置底文網頁, 記得排版) int length,i,j; char *binary = 0; length = (int) ceil( log(n)/log(2) ); binary = (char*) malloc( sizeof(char)*(length+2) ); binary[length+1] = NULL; for( i = 0; i < pow(2,n); i++ ) { for( j = length; j >= 0; j-- ) { if( n&1 ) binary[j] = '1'; else binary[j] = '0'; n >> 1; } printf("%s\n",binary); } 補充說明(Supplement): 這幾天才剛開始學 C (之前是學C++,不過也沒有很紮實..) 希望問的問題不會太笨 >"< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.213.175

03/13 22:54, , 1F
binary[length+1] = NULL; @@"
03/13 22:54, 1F

03/13 23:01, , 2F
if的部份把n ---> i
03/13 23:01, 2F

03/13 23:02, , 3F
不過還需要另一個來儲存i
03/13 23:02, 3F

03/13 23:12, , 4F
修正成功,感謝以上各位 =)
03/13 23:12, 4F

03/13 23:20, , 5F
又是整數又是浮點數的...= ="
03/13 23:20, 5F

03/13 23:22, , 6F

03/13 23:25, , 7F
少了return ˊˋ
03/13 23:25, 7F

03/13 23:28, , 8F
calloc 還可以再少一行! XD
03/13 23:28, 8F

03/13 23:56, , 9F
end = (uint)-1 >> (sizeof(uint)*8 - bitCount) 是什麼?
03/13 23:56, 9F

03/14 00:04, , 10F
就是end = (uint)((1<<bitCount)-1)
03/14 00:04, 10F

03/14 00:07, , 11F
因為左移是乘以二 反之則是右移-->(/2)
03/14 00:07, 11F

03/14 00:08, , 12F
原來如此 @@
03/14 00:08, 12F

03/14 00:15, , 13F
左移怕 sizeof(unsigned)*8 個 bits 處理不到, 所以這
03/14 00:15, 13F

03/14 00:15, , 14F

03/14 00:16, , 15F
樣做(怕溢位)
03/14 00:16, 15F

03/14 00:18, , 16F
我想重點是unsigned吧因為負數....
03/14 00:18, 16F

03/14 00:19, , 17F
signed 更少, unsigned 反而好做
03/14 00:19, 17F
文章代碼(AID): #1DVDa-MY (C_and_CPP)
文章代碼(AID): #1DVDa-MY (C_and_CPP)