我最近遇到了以下代码行,我不知道是什么>>
运算符的含义以及如何计算它。
int dat;
int val;
dat = (125*val)>>8 ;
如果有人能给我关于它的工作原理和技术名称的见解>>
,我将不胜感激。
编辑:你们中的一些人提到val
了程序正确运行的充分初始化。没错,我的主程序已经为 初始化了一个值val
,但是为了理解 的计算概念dat
,我们假设val
等于任意整数n
。
我最近遇到了以下代码行,我不知道是什么>>
运算符的含义以及如何计算它。
int dat;
int val;
dat = (125*val)>>8 ;
如果有人能给我关于它的工作原理和技术名称的见解>>
,我将不胜感激。
编辑:你们中的一些人提到val
了程序正确运行的充分初始化。没错,我的主程序已经为 初始化了一个值val
,但是为了理解 的计算概念dat
,我们假设val
等于任意整数n
。
第三行的计算取val
(未定义,你必须初始化它!)的值并乘以 125。此操作的结果向右移位。
位移 8 位是指所有位的位置都向右移动 8 位,这样 256 值的位就变成了 1 值的位。例子:
259 >> 8
二进制表示:100000011 >> 8 == 1
而结果 1 是 259 的二进制表示的第一个 1。
右移与除以 2 相同(四舍五入到下一个较小的整数)。
对有符号类型进行位移是危险的,因为位移负值可能会导致符号位位移。
在 c++ 中 >> 意味着将代码右移
int dat = (125*val)>>8 ;
将会:
int dat = 125 * val;
for(int i = 0; i < 8; i++)
{
dat = dat / 2;
}
所以稍微解释一下:
int dat;
int val = 4; //initialized.... for example
dat = (125*val); // dat = 500
dat = 500>>8;
500 = 111110100 所以 500>>8 => 1
dat = 1;