2013-10-14 127 views
-2

任何人都可以请解释我下面的代码行是什么产生的?这究竟意味着什么?

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

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

+2

''<<叫位运算符......你会发现这个链接有用http://www.cprogramming.com/tutorial/bitwise_operators.html –

+1

原因的评级-4 ? – EverythingRightPlace

+1

@chris虽然不完全一样,对吧?他的代码只是给出了类型n的最重要的位设置为1的东西。 – PeterT

回答

7

让我们来分析一下:

  • sizeof(n)提供可变n的类型的大小。对于在32位系统上的int变量n,这将例如是4(字节)。请参阅文件大小这里:http://en.cppreference.com/w/cpp/keyword/sizeof
  • * 8 - >在一个字节乘法由比特数 - >即sizeof(n) * 8提供的比特必要n数。
  • <<是shiftleft操作员。它会将第一个操作数左移第二个操作数指定的位数(参见:http://en.wikipedia.org/wiki/Logical_shift);这是合乎逻辑的转变,这意味着从右边向右移动的位被零填满。因此

完整表达提供与由可变n组的最高位可表示为1。

实施例的expresssion(假设现在nchar类型的,并且假定炭的大小作为典型1个字节):

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

非常感谢! – summerNight

相关问题