c语言中如何获取整数在内存中的表示。
来源:互联网 发布:手机怎么改淘宝会员名 编辑:程序博客网 时间:2024/06/05 16:02
计算机的移位操作(补码表示):
正数左移右移都是补0
负数:左移补0右移补10:不变
计算机的移位规则是由计算机的编译器决定的。在内存中负数用补码表示。如何得到补码就是取反加一符号位除外。从补码得到原码也是取反加一符号位除外。
主要思路:首先得到符号位,然后在设定一个 0100 0000 0000 0000 0000 0000 0000 0000 来取得每一位通过与操作。
每一次操作后将其移位 ,依次进行。
为了更加明白的显示出移位规则,我将最大值最小值和0,1,-1三个数的 计算机表示都输出了。同时输出了他们的移位之后的表示,让我们对移位操作有一个直观的操作。
//程序思想就是。先获取符号位,然后再处理每一位利用与进行计算。
#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#
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;
}
- c语言中如何获取整数在内存中的表示。
- C语言中float类型在内存中的表示
- C/C++中整数与浮点数在内存中的表示方式
- C语言:浮点数在内存中的表示
- C语言:浮点数在内存中的表示(转)
- C语言:浮点数在内存中的表示
- C语言:浮点数在内存中的表示
- 【C语言】编写代码实现:求一个整数在内存中的二进制位中1的个数
- 获取计算机在内存中的二进制表示
- 进程在内存中如何表示
- Java中方法在内存中的表示
- C语言的各种数据在内存中如何存储?
- C语言中float,double类型,在内存中的结构
- C语言中,float在内存中的储存方式
- C语言中,float在内存中的储存方式
- C语言中 float double在内存中的存储
- C语言中浮点数在内存中的存储格式
- c语言中各数据类型在内存中的存储方式
- Struts2学习篇(一) 第一个Struts2程序
- Struts2学习篇(二) 处理一个form多个submit
- Struts2学习篇(三) struts.xml常用配置解析
- Struts2学习篇(四) 使用validate方法验证数据
- Hibernate 第七讲 Hibernate的三种状态
- c语言中如何获取整数在内存中的表示。
- warning: passing argument 2 of 'request_irq' from incompatible pointer type导致的中断申请失败和
- 图像处理--角点检测(Harris以及其他算法研究)
- zju2009:ZOJ
- 动手实现:远程登录计算机
- struts2——第一周小结
- hadoop中Configuration获取配置信息
- 常见设计模式解析和实现(C++)Prototype模式(原型模式)
- 语音识别过程中涉及到的一些相关工具