-2
任何人都可以请解释我下面的代码行是什么产生的?这究竟意味着什么?
i = 1<<(sizeof(n) * 8 - 1);
你可以为'n'假设任何你想要的值。我正在尝试使用Booths算法实现一个8位乘法程序。
任何人都可以请解释我下面的代码行是什么产生的?这究竟意味着什么?
i = 1<<(sizeof(n) * 8 - 1);
你可以为'n'假设任何你想要的值。我正在尝试使用Booths算法实现一个8位乘法程序。
让我们来分析一下:
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(假设现在n
是char
类型的,并且假定炭的大小作为典型1个字节):
sizeof(char) = 1
=> sizeof(char) * 8 - 1 = 7
=> 1 << 7 = 10000000
非常感谢! – summerNight
''<<叫位运算符......你会发现这个链接有用http://www.cprogramming.com/tutorial/bitwise_operators.html –
原因的评级-4 ? – EverythingRightPlace
@chris虽然不完全一样,对吧?他的代码只是给出了类型n的最重要的位设置为1的东西。 – PeterT