谁能解释一下下面这行代码到底产生了什么?
i = 1<<(sizeof(n) * 8 - 1);
您可以为“n”假设您想要的任何值。我正在尝试使用 Booths 算法实现一个 8 位乘法程序。
谁能解释一下下面这行代码到底产生了什么?
i = 1<<(sizeof(n) * 8 - 1);
您可以为“n”假设您想要的任何值。我正在尝试使用 Booths 算法实现一个 8 位乘法程序。
让我们分解一下:
sizeof(n)
传递变量类型的大小n
。对于32 位系统上的int
变量,这将是例如 4(字节)。n
请参阅 sizeof 文档,例如:http: //en.cppreference.com/w/cpp/keyword/sizeof)* 8
-> 乘以一个字节中的位数 - >即sizeof(n) * 8
提供.n
<<
是左移运算符。它将第一个操作数向左移动第二个操作数指定的位数(参见此处:http ://en.wikipedia.org/wiki/Logical_shift );这是逻辑移位,这意味着从右侧移入的位被零填充。因此,完整的表达式提供了一个由变量n
设置为 1 可表示的最高位的表达式。
示例(假设n
现在是 type char
,并假设 char 的大小为典型的 1 字节):
sizeof(char) = 1
=> sizeof(char) * 8 - 1 = 7
=> 1 << 7 = 10000000