4 uint64_t a = 0xffffffffffffffff;
(gdb) n
5 uint32_t b = 0xffffffff;
(gdb) p a
$1 = 18446744073709551615
(gdb) p/x a>>64
$2 = 0xffffffffffffffff
(gdb) p/x a<<64
$3 = 0xffffffffffffffff
(gdb) p/x b>>32
$4 = 0x0
(gdb) p/x b<<32
$5 = 0x0
#include<stdint.h>
#include<stdio.h>
int main(void){
uint64_t a = 0xffffffffffffffff;
uint32_t b = 0xffffffff;
printf("a:%x\n", a>>64);
printf("b:%x\n", b>>32);
return 0;
}
32位全F,左右移動32位,均會等于0,理論上也是0,可以理解
為什么64位全F,左右移動64位,還是等于全F?不應該等于0嗎?求大神講解,萬分感謝
uj5u.com熱心網友回復:

上邊是GDB除錯列印資訊,下邊是原始碼,就這幾行
uj5u.com熱心網友回復:
任何情況下,若 rhs 為負或大于或等于提升后的 lhs 中的位數,則行為未定義。https://zh.cppreference.com/w/c/language/operator_arithmetic
uj5u.com熱心網友回復:
https://blog.csdn.net/huqinwei987/article/details/70941199供參考~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/284372.html
標籤:C語言
