打印

对keil移位的不解。请指点

[复制链接]
3930|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-3-14 15:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2007-3-14 16:12 | 只看该作者

随便说说

    应该是这样吧
    unsigned char f; 
    f=0xFD;
    f = f>>1;    //

使用特权

评论回复
板凳
hkap| | 2007-3-14 16:18 | 只看该作者

char 是有符号变量,最高位为1表示负数

使用特权

评论回复
地板
浪淘沙| | 2007-3-14 16:44 | 只看该作者

3楼正解;不能因为移位而使一个负数变成正数

使用特权

评论回复
5
huangqi412|  楼主 | 2007-3-14 21:38 | 只看该作者

再请教一下

main()
{
char yiwei();

~~~~~
deng=yiwei(deng,n);

~~~~~~
}


char yiwei(char s,char r)//传递参数,被移数和移动次数
{
unsigned char b,c;     //用uchar型
b=s>>(8-r);           //这里变成补1  什么原理呢
c=s<<r;              //这里左移是补0
s=c|b;              //
return(s);
}
如果我不改变大体结构的话,怎么变成补0呢,

使用特权

评论回复
6
平常人| | 2007-3-14 22:05 | 只看该作者

这是在做循环移位,楼主不妨用几个数在纸上演算一下,很

在纸上演算一下是个非常有效的办法,对这种小程序非常合适;自己演算一下印象更深刻。

使用特权

评论回复
7
huangqi412|  楼主 | 2007-3-14 22:37 | 只看该作者

我现在问题是不知道为什么变成了补1,原因

现在我知道可以这个可以直接调库函数
不过,刚用了几天keil c,这两天在里面乱搞鼓,看各种情况机器是怎么处理的,什么原理,以后真正写程序就有章可循,知道怎么样写好一些。出了错也容易找。

使用特权

评论回复
8
sjnh| | 2007-3-15 09:02 | 只看该作者

负数右移当然补1

就像 浪淘沙 说得,补0就变成正数了

使用特权

评论回复
9
9398711029| | 2007-3-15 09:22 | 只看该作者

那负数左移怎么就能边成正数呢?

deng=0x8e;
deng<<=1;
//deng=?

使用特权

评论回复
10
huangqi412|  楼主 | 2007-3-15 11:21 | 只看该作者

懂拉,谢谢

使用特权

评论回复
11
rainbowwrh| | 2007-3-15 14:55 | 只看该作者

移位

看是算术移位还是逻辑移位了额
前者是把最高位补到后面去
后者是补0到最低位去

使用特权

评论回复
12
悠忽| | 2007-3-16 23:01 | 只看该作者

好好看看C语言的书吧,逻辑移位和算术移位是有区别的

unsigned右移是补0,用c有符则补1

使用特权

评论回复
13
computer00| | 2007-3-17 01:08 | 只看该作者

同样是>>操作,不同的系统结果可能会不一样,有的是逻辑右

有的是算术右移.  只有有符号的负数右移时,才会出现这个问题。

使用特权

评论回复
14
huangqi412|  楼主 | 2007-3-17 08:48 | 只看该作者

恩看了,潭浩强c语言书上说的,只有负数右移有点麻烦

使用特权

评论回复
15
zxq1234508| | 2007-3-17 09:52 | 只看该作者

为什么int型和unsigned int型不会出现楼主说的那中情况呢?我刚才试过了。

使用特权

评论回复
16
computer00| | 2007-3-17 10:04 | 只看该作者

int型,你用-1去试试?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

622

主题

24960

帖子

18

粉丝