按步骤C ++分解以下计算

时间:2013-07-12 08:56:19

标签: c bitwise-operators

我最近遇到了以下代码行,我不知道>>运算符的含义以及如何计算它。

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

如果有人可以告诉我它是如何运作的见解以及>>的技术名称,我将非常感激。

编辑:有些人提到了val的适当初始化,以使程序正常运行。这是正确的,我的主程序初始化了val的值,但为了理解dat的计算概念,假设val等于任意整数n

3 个答案:

答案 0 :(得分:1)

第三行中的计算采用val的值(未定义,您必须初始化它!)并将其乘以125.此操作的结果向右移位。

位移8表示所有位位置向右移位8,因此256值位成为1值位。例如:

259 >> 8

二进制表示:     100000011>> 8 == 1

而结果1是259的二进制表示的前1个。

右移与除以2相同(四舍五入到下一个较小的整数)。

对有符号类型进行位移是危险的,因为移位负值可能会导致符号位移。

答案 1 :(得分:0)

in c ++>>意味着向右移代码

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

将是:

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

答案 2 :(得分:0)

所以要解释一下:

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

500 = 111110100 所以 500>&gt; 8 =&gt; 1

 dat = 1;