English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

我知道在c裡
<<是往左移動
>>是往右移動
如果我宣告一個變數x=1111
然後經過x<<3運算
不就是1111往左位移3個數
不就是1000嘛?
可是 好像不是這樣耶
拜託 誰能教我怎麼用位移
急需~~!!

2006-12-11 19:26:59 · 2 個解答 · 發問者 Otaku Man 1 in 電腦與網際網路 程式設計

可是之前計概課有出一題
說要把2進位轉10進位
昨天助教給我提示是說要把要換成2進位的數字
先右移在左移
然後弄迴圈去跑
這...要怎麼弄阿?

2006-12-12 12:42:32 · update #1

那如果有一個數字不只有1跟0
例如2345好了
做左移或右移
能嘛?

2006-12-12 12:44:01 · update #2

蛤...不懂...
我問的應該是C的問題阿...

2006-12-13 17:26:15 · update #3

呵呵~~
原來是我搞錯了阿
不好意思嘿.......

2006-12-14 16:13:16 · update #4

2 個解答

<<是往左移動
>>是往右移動
這兩句話都沒錯
但是它是移 bit (二進位) 不是移 byte (十進位)

以 1 而言
它的二進位表示法是 00000001
<< 1 就變成 00000010 => 十進位裡的 2
<< 2 就變成 00000100 => 十進位裡的 4
<< 3 就變成 00001000 => 十進位裡的 8
所以往左移1位等於兩倍的意思 (因為它是二進位)
所以1111往左位移3個數等於做三次兩倍 (2 ^ 3)
結果會是 8888
同樣的道理 往右移 是除以 2 的意思
1111往右位移3個數會是 138
(注意: 所有的餘數會被捨去)

2006-12-12 02:57:09 · answer #1 · answered by JJ 7 · 0 0

我覺得教你的老師有混時間的嫌疑。找一個不是 VB 的長處要你們在那玩半天?卻沒有教 VB 的長處及 Microsoft 開發工具整合的優點,就像要你用 WORD 去做表格,算加總,用 EXCEL 打報告一樣。

如果你要用 VB 做,也可以(但就像要你用 WORD 去做表格,算加總);做法就是先把數字變成二進位字串,再把字串向左移,或向右移,再轉回來數字。
你可以參考以下的網頁內容,
http://www.xbeat.net/vbspeed/c_LongToBit.htm

既然談到了 C 語言中的位元運算。為何不教你們直接用 C 去處理呢? 這也是 Microsoft 開發工具整合的優點。
你可以參考以下的網頁內容,
http://support.microsoft.com/kb/q187912/

建立一個 VBDLL.cpp:
#include

long __stdcall bitshift(LONG num)
{
return num <<1;
}

建立一個 VBDLL.def:
LIBRARY bitsmp
DESCRIPTION 'VBDLL'
EXPORTS
bitshift

在VB中引用這一個 DLL 中的函數
Private Declare Function bitshift Lib "VBDLL.dll" (ByVal num As Long) As Long

Private Sub Form_Load()

Dim k As Long

k = 2345
For i = 1 To 3
k = bitshift(k)
Next

Debug.Print k

End Sub


你要的結果就出來了

2006-12-14 12:19:22 補充:
是我弄錯了,不過這是 VisualBasic 區

2006-12-13 16:28:54 · answer #2 · answered by ? 6 · 0 0

fedest.com, questions and answers