各位c++高手们,帮忙解决下整数内码有关问题
各位c++高手们,帮忙解决下整数内码问题
原题是这样的:将十进制整数n的内部32位二进制码输出。
我希望输出的是32位,可是只能是28位,帮忙解决下,为什么,flags不能是0x80000000.谢谢啦!
#include <iostream>
using namespace std;
void print(long n)
{
for(long flags=0x8000000; flags; flags=flags>>1) {
if(n&flags) cout << '1';
else cout << '0';
}
cout << " " << n << endl;
}
int main()
{
long n;
cin>>n;
print(n);
return 0;
}
------解决方案--------------------
for(long flags=0x8000000; flags; flags=flags>>1) {
1,因为你以flags!=0作为结束条件, 所以当右移到再也没有1就停下了.
2,代码有问题,这里最高位是0,如果是1你就悲剧了,请使用unsigned long flags。
------解决方案--------------------
修改一行
原题是这样的:将十进制整数n的内部32位二进制码输出。
我希望输出的是32位,可是只能是28位,帮忙解决下,为什么,flags不能是0x80000000.谢谢啦!
#include <iostream>
using namespace std;
void print(long n)
{
for(long flags=0x8000000; flags; flags=flags>>1) {
if(n&flags) cout << '1';
else cout << '0';
}
cout << " " << n << endl;
}
int main()
{
long n;
cin>>n;
print(n);
return 0;
}
------解决方案--------------------
for(long flags=0x8000000; flags; flags=flags>>1) {
1,因为你以flags!=0作为结束条件, 所以当右移到再也没有1就停下了.
2,代码有问题,这里最高位是0,如果是1你就悲剧了,请使用unsigned long flags。
------解决方案--------------------
修改一行
- C/C++ code
for(unsigned long flags=0x80000000; flags; flags=flags>>1) {
------解决方案--------------------
看来上面的两位说的挺清楚的了
------解决方案--------------------