• # Quelques autres

    Posté par . En réponse au journal Un décalage de 64 bits, ça vous inspire comment ?. Évalué à 6.

    $ awk 'BEGIN{print(rshift(1,64))}'
    1
    $ perl -E 'say 1 >> 64'
    0
    $ tclsh8.6
    % expr {1 >> 64}
    0
    $ cat main.go
    package main
    import "fmt"
    func main() {
     fmt.Println(1 >> 64)
    }
    $ go run main.go
    0
    

    rust se démarque un peu : il n'en veut pas.

    $ cat main.rs
    fn main() {
     println!("{}", 1 >> 64);
    }
    $ rustc main.rs
    error: bitshift exceeds the type's number of bits, #[deny(exceeding_bitshifts)] on by default
     --> main.rs:2:20
     |
    2 | println!("{}", 1 >> 64);
     | ^^^^^^^
    error: aborting due to previous error
    

    Et si on lui passe un nombre non constant qu'il peut pas prévoir, on a un crash.

    $ cat main.rs
    use std::env;
    fn main() {
     let args: Vec<_> = env::args().collect();
     let n: i64 = args[1].parse().unwrap();
     println!("{}", 1 as i64 >> n);
    }
    $ rustc main.rs
    $ ./main 64
    thread 'main' panicked at 'attempt to shift right with overflow', main.rs:6
    note: Run with `RUST_BACKTRACE=1` for a backtrace.