| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6987 人关注过本帖
标题:请问负数的右移是怎么回事
取消只看楼主 加入收藏
ml232528
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:367
专家分:879
注 册:2007-7-23
结帖率:80%
收藏
 问题点数:0 回复次数:3 
请问负数的右移是怎么回事
右移和左移都补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?
搜索更多相关主题的帖子: 负数 
2008-09-27 21:36
ml232528
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:367
专家分:879
注 册:2007-7-23
收藏
得分:0 
原来是怎么规定哦

做这个突然发现了一个问题
char型移位运算时的长度 和int相等

char a=-16;
cout<<sizeof(a>>1)<<endl;
cout<<sizeof(int)<<endl;

输出都是4

-︻┻┳═一 ☆ 悲伤的代价就是让自己明白什么是最重要的和应该珍惜的
2008-09-27 22:39
ml232528
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:367
专家分:879
注 册:2007-7-23
收藏
得分:0 
[bo][un]iFreeBSD[/un] 在 2008-9-27 22:49 的发言:[/bo]


有啥问题?  sizeof(a>>1) 不是int类型运算??

>>运算我以为跟类型无关 所以才这么说

-︻┻┳═一 ☆ 悲伤的代价就是让自己明白什么是最重要的和应该珍惜的
2008-09-28 09:30
ml232528
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:367
专家分:879
注 册:2007-7-23
收藏
得分:0 
[bo][un]MARK357640995[/un] 在 2008-9-28 09:17 的发言:[/bo]

我还是搞不懂有符号数和无符号数的左移和右移问题?详细地讲解一下好嘛》  数是怎样移动的?


二楼有回答

-︻┻┳═一 ☆ 悲伤的代价就是让自己明白什么是最重要的和应该珍惜的
2008-09-28 09:32
快速回复:请问负数的右移是怎么回事
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.095495 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved