Can you try the attached patch? It fixes a few things that I reported to Tom yesterday: --- None of these are necessarily bugs, but: * I find the behavior of `lsh', `logand', `logior', and `logxor', when given negative arguments, surprising. I think it would make most sense to treat negative numbers as the infinite bitstream consisting of all ones to the left of the specified value: (logand -1 -1) would be interpreted as ...1111111 & ...1111111 = ...1111111, so it would be -1 (rather than 2 * most-positive-fixnum + 1). (lsh (- (lsh -1 64) 1) -1) would be ...1110111...1111 shifted to the right by one digit, an odd number, rather than the even number currently produced. (I believe lsh and ash should behave identically.) * the documentation of `random' still refers to representable integers * I think we should rename `random' to `random-fixnum' and add a Lisp function `random' which accepts positive fixnum, bignum, and float arguments, doing the right thing for each. `cl-random' similarly needs updating, or documentation of its current 32-bit nature. * there appears to be a most-positive-bignum; on x86-64, it consists of 0x7fffffff 8-byte words of one bits, 16 GiB. Operating on integers larger than that will currently abort emacs with an error message: "gmp: overflow in mpz type". * long-running bignum operations appear not to be interruptible. Please consider something like the attached patch? Thanks! On Fri, Aug 17, 2018 at 3:31 AM Katsumi Yamaoka wrote: > > Hi, > > What do I have to do to get -1 by `(logior -1)' ? Otherwise, > is it just a bug? Setting `binary-as-unsigned' has no effect. > > I'm using an old input method sj3-egg[1] but it got not to work. > The following Lisp snippet shows what it does first when opening > the connection to the sj3 server: > > (with-temp-buffer > (set-buffer-multibyte nil) > (let ((pt (point-min))) > (insert "\377\377\377\376") > (logior > (lsh (- (logxor (char-after pt) 128) 128) 24) > (lsh (char-after (+ pt 1)) 16) > (lsh (char-after (+ pt 2)) 8) > (lsh (char-after (+ pt 3)) 0)))) > > It should return -2, but 4611686018427387902 now. > (Oh, it's doubled most-positive-fixnum!) > > Thanks. > > [1] http://www.jpl.org/ftp/pub/elisp/sj3-egg-0.8.5.tar.gz > > In GNU Emacs 27.0.50 (build 1, x86_64-unknown-cygwin, GTK+ Version 3.22.28) > of 2018-08-17 built on localhost > Windowing system distributor 'The Cygwin/X Project', version 11.0.12000000 > > >