Re: [C]逻辑移位与算术移位的问题

  • From: "Vincent Silent" <vincent.silent@xxxxxxxxx>
  • To: ghostunix@xxxxxxxxxxxxx
  • Date: Thu, 15 May 2008 22:00:08 +0800

C语言, 算术移位、逻辑移位实现例程。

下载地址: ftp://guest:guest@xxxxxxxxx/download/sxx.tar.gz




2008/5/15 Thomas X. Iverson <txi@xxxxxxxxxxxxx>:

> 2008/5/15 Thomas X. Iverson <txi@xxxxxxxxxxxxx>:
> > 2008/5/15 Vincent Silent <vincent.silent@xxxxxxxxx>:
> >> 你说下逻辑移位和算术移位的区别吧, C 语言里的 >> << 运算是哪种,那就是哪种,难道换个编译器就变了?
> >> JAVA里是有 << >> <<< >>> 四个运算符的,区分的很详细。
> >>
> >> 2008/5/15 Thomas X. Iverson <txi@xxxxxxxxxxxxx>:
> >>>
> >>> 2008/5/15 Vincent Silent <vincent.silent@xxxxxxxxx>:
> >>> > C 语言并不区分算术移位、逻辑移位。
> >>> >
> >>> >
> >>> >
> >>> > 2008/5/15 Thomas X. Iverson <txi@xxxxxxxxxxxxx>:
> >>> >>
> >>> >> 是否针对负数值进行逻辑移位取决于什么?
> >>> >>
> >>> >> int x=-8;
> >>> >> x>>=2;   /* x==-2 */
> >>> >>
> >>> >> 什么情况下x会作算术移位,得到一个很大的一个正值?与编译器有关还是什么?
> >>> >>
> >>> >>
> >>> >> --
> >>> >> Keep It Simple Stupid
> >>> >>
> >>> >> http://blog.ghostunix.org
> >>> >>
> >>> >> ghosTM55
> >>> >
> >>> >
> >>>
> >>> 这是我在K&R上看到的,但是我现在看到的这本书没有写到这两个概念,只是复习到位运算的时候想起来的
> >>> 包括我最早看的谭好强的书也提到了逻辑运算和算术运算,你说没有是什么意思呢
> >>>
> >>> --
> >>> Keep It Simple Stupid
> >>>
> >>> http://blog.ghostunix.org
> >>>
> >>> ghosTM55
> >>
> >>
> >
> > 区别?就是说,当一个负数向右移位时,是自动补充符号位还是只是普通的移位
> > -8在一般情况下(逻辑移位)右移2位得到:10001000 => 10000010
> > 而在算术移位下得到:00100010,也就得到了一个很大的正数值
> >
> > --
> > Keep It Simple Stupid
> >
> > http://blog.ghostunix.org
> >
> > ghosTM55
> >
>
> 我的表达有错误
>
> --
> Keep It Simple Stupid
>
> http://blog.ghostunix.org
>
> ghosTM55
>

Other related posts: