这到底是什么意思?

sum*_*ght -2 c++

任何人都可以解释我下面的代码行产生了什么?

i = 1<<(sizeof(n) * 8 - 1);
Run Code Online (Sandbox Code Playgroud)

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

cod*_*ing 7

让我们分解一下:

  • sizeof(n)提供变量类型的大小n.对于32位系统上的int变量n,这将是例如4(字节).请参阅sizeof文档,例如:http://en.cppreference.com/w/cpp/keyword/sizeof)
  • * 8- >乘以位的一个字节的数目- >即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
Run Code Online (Sandbox Code Playgroud)