我试图理解C/C++中的位移运算符,但它们让我感到很困难。
我有一个无符号8位整数初始化为一个值,例如1。
uint8_t x = 1;
据我所知,它在内存中表示为|0|0|0|0|0||0||0||1|
。现在,当我尝试将变量x左移16位时,希望得到输出0。但令我惊讶的是,我得到了65536
的输出。我肯定错过了一些东西,但我无法理解。
这是我的代码:
#include <iostream>
int main() {
uint8_t x = 1;
std::cout<<(x<<16)<<"\n";
return 0;
}
这是一个天真的问题,但它一直困扰着我。
unsigned char value = 255; unsigned char shiftAmount = 24; printf("%d ", (value << shiftAmount) );
你会得到-16777216作为输出(而不是0)。 - bobobobo