获取计算机在内存中的二进制表示

计算机的移位操作(补码表示):

正数左移右移都是补0

负数:左移补0右移补1
0:不变

计算机的移位规则是由计算机的编译器决定的。在内存中负数用补码表示。如何得到补码就是取反加一符号位除外。从补码得到原码也是取反加一符号位除外。

主要思路:首先得到符号位,然后在设定一个 0100 0000  0000 0000    0000 0000    0000 0000 来取得每一位通过与操作。

每一次操作后将其移位  ,依次进行。


为了更加明白的显示出移位规则,我将最大值最小值和0,1,-1三个数的 计算机表示都输出了。同时输出了他们的移位之后的表示,让我们对移位操作有一个直观的操作。




//write in 20130303 by binge


//程序思想就是。先获取符号位,然后再处理每一位利用与进行计算。


#include<iostream>
using namespace std;


void coutbinary(int num)
{


//注意不要使用负数作为移位的因为。。负数在不同编译器的移位规则不同。。。分为算数移位和逻辑移位
//在VC中是逻辑右移
int temp=0x80000000;//这个数字是首位为1的补码表示为最小的数
//cout<<temp<<endl;
int fuhao=0;//判断首位是否为0的
if(temp&num)
fuhao=1;
cout<<fuhao;

temp=0x40000000;//这个是一个正数这样的话移位就是补0操作。

int output;//每次输出的值
int i=31;//一共对31位进行操作
while(i)
{


output=temp&num;
output=output>>(i-1);//注意要移位才能得出0或者1
cout<<output;
temp=temp>>1;
//yihui ce shi while(i--)
i--;
}
//cout<<i<<endl;
cout<<endl;
}


int main()
{
while(1)
{
int min=0x80000000;
cout<<"最小的数是:"<<min<<endl;
cout<<"二进制表示是:";
coutbinary(min);
cout<<"往右移1位是:"<<(min>>1)<<endl;
cout<<"二进制表示是:";
coutbinary(min>>1);
cout<<"往左移1位是:"<<(min<<1)<<endl;
cout<<"二进制表示是:";
coutbinary(min<<1);
cout<<endl;


int max=0x7FFFFFFF;
cout<<"最大的数是:"<<max<<endl;
cout<<"二进制表示是:";
coutbinary(max);
cout<<"往右移1位是:"<<(max>>1)<<endl;
cout<<"二进制表示是:";
coutbinary(max>>1);
cout<<"往左移1位是:"<<(max<<1)<<endl;
cout<<"二进制表示是:";
coutbinary(max<<1);
cout<<endl;
int ling=0;
cout<<"数是:"<<ling<<endl;
cout<<"二进制表示是:";
coutbinary(ling);
cout<<"往右移1位是:"<<(ling>>1)<<endl;
cout<<"二进制表示是:";
coutbinary(ling>>1);
cout<<"往左移1位是:"<<(ling<<1)<<endl;
cout<<"二进制表示是:";
coutbinary(ling<<1);
cout<<endl;
int yi=1;
cout<<"数是:"<<yi<<endl;
cout<<"二进制表示是:";
coutbinary(yi);
cout<<"往右移1位是:"<<(yi>>1)<<endl;
cout<<"二进制表示是:";
coutbinary(yi>>1);
cout<<"往左移1位是:"<<(yi<<1)<<endl;
cout<<"二进制表示是:";
coutbinary(yi<<1);
cout<<endl;
int fuyi=-1;
cout<<"数是:"<<fuyi<<endl;
cout<<"二进制表示是:";
coutbinary(fuyi);
cout<<"往右移1位是:"<<(fuyi>>1)<<endl;
cout<<"二进制表示是:";
coutbinary(fuyi>>1);
cout<<"往左移1位是:"<<(fuyi<<1)<<endl;
cout<<"二进制表示是:";
coutbinary(fuyi<<1);
cout<<endl;

getchar();

}
getchar();
return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值