Groups | Search | Server Info | Login | Register


Groups > comp.lang.lisp > #60730

Re: the unsigned right shift operator in CL >>>

From Madhu <enometh@meer.net>
Newsgroups comp.lang.lisp
Subject Re: the unsigned right shift operator in CL >>>
Date 2025-10-23 16:34 +0530
Organization Motzarella
Message-ID <m3sef9yj49.fsf@pison.robolove.meer.net> (permalink)
References <m3ms5s3atl.fsf@pison.robolove.meer.net> <87wm4uu3j6.fsf@parhasard.net> <86tszy392o.fsf@williamsburg.bawden.org> <87jz0utvlt.fsf@parhasard.net>

Show all headers | View raw


* Aidan Kehoe <87jz0utvlt.fsf@parhasard.net> :
Wrote on Thu, 16 Oct 2025 21:55:26 +0100:
>  Alan Bawden:
>  > Aidan Kehoe <kehoea@parhasard.net> writes:
>  >    Something like:
>  >
>  >    (defun fixed-width-ash (width value count)
>  >      (ash (logand value (lognot (ash -1 width))) count))
>
> To comment on my own code; this won't do the desired fixed-width treatment of
> COUNT is positive, the logand would need to be done on the result of the #'ash.
> But the discussion was about implementing >>>, where COUNT is negative.
>
>  >    Construct an integer of the desired width that is all 1s, logand it
>  >    with VALUE, then shift by COUNT.
>  >
>  > Your compiler will probably recognize that this is equivalent to:
>  >
>  >    (defun fixed-width-ash (width value count)
>  >      (ash (logandc2 value (ash -1 width)) count))


something like this then, does it miss out any case?

(defun fixed-width-ash (width value count)
  (if (< count 0)
      (ash (logand value (lognot (ash -1 width))) count)
      (ash (logandc2 value (ash -1 width)) count)))



>  > But I would write it that way in the first place because I like to
>  > remember that the PDP-10 had an ANDCM instruction...
>
> I don't expect to remember any other PDP-10 instructions, but I might remember
> this one. Thanks!

Back to comp.lang.lisp | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

the unsigned right shift operator in CL >>> Madhu <enometh@meer.net> - 2025-10-15 12:34 +0530
  Re: the unsigned right shift operator in CL >>> Aidan Kehoe <kehoea@parhasard.net> - 2025-10-16 19:04 +0100
    Re: the unsigned right shift operator in CL >>> Alan Bawden <alan@csail.mit.edu> - 2025-10-16 16:06 -0400
      Re: the unsigned right shift operator in CL >>> Aidan Kehoe <kehoea@parhasard.net> - 2025-10-16 21:55 +0100
        Re: the unsigned right shift operator in CL >>> Madhu <enometh@meer.net> - 2025-10-23 16:34 +0530
          Re: the unsigned right shift operator in CL >>> Alan Bawden <alan@csail.mit.edu> - 2025-10-24 02:29 -0400
            Re: the unsigned right shift operator in CL >>> Madhu <enometh@meer.net> - 2025-10-25 21:00 +0530
            Re: the unsigned right shift operator in CL >>> Kaz Kylheku <046-301-5902@kylheku.com> - 2026-03-12 18:00 +0000
              Re: the unsigned right shift operator in CL >>> Stefan Monnier <monnier@iro.umontreal.ca> - 2026-03-12 16:34 -0400
                Re: the unsigned right shift operator in CL >>> Kaz Kylheku <046-301-5902@kylheku.com> - 2026-03-16 20:14 +0000
  Re: the unsigned right shift operator in CL >>> Madhu <enometh@meer.net> - 2025-10-23 16:38 +0530

csiph-web