C++ 对无符号8位整数的左移位操作
我试图理解C/C++中的移位运算符,但它们给我带来了困难 我将一个无符号8位整数初始化为一个值,例如1 uint8_t x=1 根据我的理解,它在记忆中表现为| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |。现在,当我试图将变量x左移16位时,我希望得到输出0。但令我惊讶的是,我得到了65536。我肯定错过了一些我无法得到的东西 这是我的密码:C++ 对无符号8位整数的左移位操作,c++,bit-manipulation,bit-shift,integer-promotion,C++,Bit Manipulation,Bit Shift,Integer Promotion,我试图理解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:
#include <iostream>
int main() {
uint8_t x = 1;
std::cout<<(x<<16)<<"\n";
return 0;
}
这是一个天真的问题,但它让我很困扰。在这个表达中
x<<16
<>从C++标准8.8移位运算符< /P>
... 操作数应为整数或无范围枚举类型,且
执行整体促销。结果的类型是
提升后的左操作数。
如果我错了,请纠正我,操作数16是32位的整数,假设整数是32位的,因此,当使用xor 8位应用它时,它会将其提升为32位,最后,结果是int32位类型。我说的对吗?@PankajMishra看到我的最新帖子了。现在很清楚了。谢谢向上投票。
#include <iostream>
#include <iomanip>
#include <type_traits>
#include <cstdint>
int main()
{
uint8_t x = 1;
std::cout << std::boolalpha << std::is_same<int, decltype( x<<16 )>::value << '\b';
return 0;
}
true