这到底是什么意思?

时间:2013-10-14 18:08:16

标签: c++

有人可以解释一下下面的代码行是什么产生的吗?

i = 1<<(sizeof(n) * 8 - 1);

你可以为'n'假设你想要的任何价值。我正在尝试使用Booths算法实现一个8位乘法程序。

1 个答案:

答案 0 :(得分:7)

让我们分解一下:

  • sizeof(n)提供变量n类型的大小。对于32位系统上的int变量n,这将是例如是4(字节)。查看sizeof文档,例如这里:http://en.cppreference.com/w/cpp/keyword/sizeof
  • * 8 - &gt;乘以一个字节中的位数 - &gt;即sizeof(n) * 8提供n所需的位数
  • <<是shiftleft运营商。它会将第一个操作数向左移动第二个操作数指定的位数(参见此处:http://en.wikipedia.org/wiki/Logical_shift);它是逻辑移位,意味着从右侧移入的位用零填充。

因此,完整表达式提供了一个表达式,其中最高位可由变量n设置为1。

示例(假设n现在为char类型,并假设char的大小为典型的1字节):

sizeof(char) = 1
=> sizeof(char) * 8 - 1 = 7
=> 1 << 7 = 10000000