2013-07-12 37 views
-1

我最近遇到下面的代碼行,我不知道運算符是什麼意思以及如何計算它。分解以下計算步驟C++

int dat; 
int val; 
dat = (125*val)>>8 ; 

如果有人可以給我的見解,它是如何工作和>>什麼技術名稱,我會非常歡迎和好評。

編輯:你們中的一些人提到了val的正確初始化,以使程序正常運行。這是正確的,我的主程序爲val初始化了一個值,但爲了理解dat的計算概念,假設val等於任意整數n

在C++
+1

按位右移位運算符(算術移位,因爲它複製的符號位) –

+1

輕鬆定位在運算符優先級圖表上。 – chris

+5

無論如何這是未定義的行爲:'val'尚未初始化。 – juanchopanza

回答

0

>>裝置右移用於

int dat = (125*val)>>8 ; 

將是代碼:

int dat = 125 * val; 
for(int i = 0; i < 8; i++) 
{ 
    dat = dat/2; 
} 
+0

它是125,而不是128('int dat = 125 * val'),只是爲了避免混淆。 – urzeit

+1

如果值爲負,'>>'的結果可能與劃分不同。 '-1/2'給出'0'。 '-1 >> 1'將導致'-1'或'MAX_INT'(至少在2的補碼機上)。 –

1

在第三行的計算需要的val的值(其沒有被定義,則有將其初始化!)並將其乘以125.此操作的結果向右移位。

移位8意味着所有位的位置向右移動8位,以便256位的位變成1值的位。例如:

259 >> 8 

在二進制表示: 100000011 >> 8 == 1

而得到的1是259.

右移二進制表示的第1是相同的作爲2除法(舍入到下一個更小的整數)。

帶符號類型的位移是危險的,因爲移位負值可能導致移位的符號位。

0

所以解釋一下:

int dat; 
int val = 4; //initialized.... for example 
dat = (125*val); // dat = 500 
dat = 500>>8; 

500 = 111110100 所以 500 >> 8 => 1

dat = 1;