c语言中如何获取整数在内存中的表示。

来源:互联网 发布:手机怎么改淘宝会员名 编辑:程序博客网 时间:2024/06/05 16:02

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

正数左移右移都是补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;

}


原创粉丝点击