La lingua che uso è C. Il tipo di x e n è int.La differenza tra ~ (x-1) e ~ x + 1 quando x = 0x80000000
Ho un codice di linea come seguendo
printf("x=%x,n=%d,first=%x,second=%x\n",x,n,((~(x+0xffffffff))>>n),((~x+1)>>n));
Esso mostra il valore di x, n e due metodi di spostamento n bit del numero complemento di x. Quando x = 0x80000000, ~ (x + 0xffffffff) = 0x8000000, ~ x + 1 = 0x80000000, tuttavia quando si spostano questi due per n bit, i risultati sono diversi.
btw, se ho cambiato 0xffffffff a ~ 1 + 1 (che significa ~ (x + (~ 1 + 1)), il risultato è lo stesso ~ x + 1
Mi chiedo perché quello che è successo. Grazie .
[Is “(uint16_t) -1" Portable C Codice?] (Http://embeddedgurus.com/barr-code/2011/06/is-uint16_t-1-portable-c-code/) – Lundin
@Lundin Quell'articolo è sbagliato. '(uint16_t) -1' ** è ** garantito dallo standard per produrre' 0xFFFF' se l'implementazione fornisce quel tipo in 'stdint.h'. (Naturalmente, nulla è garantito se è il tuo typedef.) Non c'è ambiguità, i tipi a larghezza fissa non devono avere bit di riempimento, quindi non è nemmeno limitato ai bit di valore (beh, lo è, dato che lì sono solo bit di valore in 'uintN_t'). –