EDIT: No, wait. This is code that printed correct results, isn't it?
It looks the the compiler is using the wrong shift function:
void loop() {
uint64_t BitFolge = (69ULL << 40);
Serial.println((uint32_t)(BitFolge >> 32));
;;; for the non volatile case, the compiler simply optimizes away the math,
;;; and uses the resulting constant as argument to println
6a0: 15 e4 ldi r17, 0x45 ; 69
:
6aa: 60 e0 ldi r22, 0x00 ; 0
6ac: 75 e4 ldi r23, 0x45 ; 69
6ae: 80 e0 ldi r24, 0x00 ; 0
6b0: 90 e0 ldi r25, 0x00 ; 0
6b2: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <Print::println(unsigned long, int)
Serial.println((uint32_t)(BitFolge & 0xFFFFFFFF));
6b6: 60 e0 ldi r22, 0x00 ; 0
6b8: 70 e0 ldi r23, 0x00 ; 0
6ba: cb 01 movw r24, r22
6bc: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <Print::println(unsigned long, int) [clone .constprop.3]>
;;; For the volatile case, optimization is defeated.
volatile uint64_t BitFolge_volatile = (69ULL << 40);
;;; initialize the constant.
6c0: 19 82 std Y+1, r1 ; 0x01
6c2: 1a 82 std Y+2, r1 ; 0x02
6c4: 1b 82 std Y+3, r1 ; 0x03
6c6: 1c 82 std Y+4, r1 ; 0x04
6c8: 1d 82 std Y+5, r1 ; 0x05
6ca: 1e 83 std Y+6, r17 ;;; still contains 0x45
6cc: 1f 82 std Y+7, r1 ; 0x07
6ce: 18 86 std Y+8, r1 ; 0x08
Serial.println((uint32_t)(BitFolge_volatile >> 32));
;;; load the constant.
6d0: 29 81 ldd r18, Y+1 ; 0x01
6d2: 3a 81 ldd r19, Y+2 ; 0x02
6d4: 4b 81 ldd r20, Y+3 ; 0x03
6d6: 5c 81 ldd r21, Y+4 ; 0x04
6d8: 6d 81 ldd r22, Y+5 ; 0x05
6da: 7e 81 ldd r23, Y+6 ; 0x06
6dc: 8f 81 ldd r24, Y+7 ; 0x07
6de: 98 85 ldd r25, Y+8 ; 0x08
;;; shift by 32. EXCEPT __lshrdi3 is a 32bit shift. Should be __lshrti3
6e0: 00 e2 ldi r16, 0x20 ; 32
6e2: 0e 94 e6 03 call 0x7cc ; 0x7cc <__lshrdi3>
;;; extract 32bits for printing.
6e6: b9 01 movw r22, r18
6e8: ca 01 movw r24, r20
6ea: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <Print::println(unsigned long, int)
;;; reload the number and extract the low bits for printing.
Serial.println((uint32_t)(BitFolge_volatile & 0xFFFFFFFF));
6ee: 59 81 ldd r21, Y+1 ; 0x01
6f0: 4a 81 ldd r20, Y+2 ; 0x02
6f2: 3b 81 ldd r19, Y+3 ; 0x03
6f4: 2c 81 ldd r18, Y+4 ; 0x04
6f6: 8d 81 ldd r24, Y+5 ; 0x05
6f8: 8e 81 ldd r24, Y+6 ; 0x06
6fa: 8f 81 ldd r24, Y+7 ; 0x07
6fc: 88 85 ldd r24, Y+8 ; 0x08
6fe: 65 2f mov r22, r21
700: 74 2f mov r23, r20
702: 83 2f mov r24, r19
704: 92 2f mov r25, r18
706: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <Print::println(unsigned long, int)