请问负数的右移是怎么回事
右移和左移都补0吗?负数的右移呢?#include<iostream>
using namespace std;
template<typename T>
void two(T x); //二进制输出
int main()
{
int a=-256;
cout<<"没有移位前"<<endl; two(a);
cout<<"移位后"<<endl; two(a>>4);
cout<<"无符号"<<endl; two((unsigned int)a);
cout<<"无符号移位后"<<endl; two(((unsigned int)a)>>4);
getchar();
return 0;
}
template<typename T>
void two(T x)
{
int i=sizeof(T)*8-1;
for(;i+1;i--)
{
if(x>>i&1)cout<<"1";
else cout<<"0";
}
cout<<endl;
}
结果显示:
没有移位前
11111111111111111111111100000000
移位后
11111111111111111111111111110000
无符号
11111111111111111111111100000000
无符号移位后
00001111111111111111111111110000
负数的右移补1?