Le langage que j'utilise est C. Le type de x et n est int.La différence entre ~ (x-1) et ~ x + 1 lorsque x = 0x80000000
I ont un code de ligne comme suit
printf("x=%x,n=%d,first=%x,second=%x\n",x,n,((~(x+0xffffffff))>>n),((~x+1)>>n));
Elle montre la valeur de x, n et deux méthodes de décalage de n bits du nombre de complément de x. Lorsque x = 0x80000000, ~ (x + 0xffffffff) = 0x8000000, ~ x + 1 = 0x80000000, mais lorsque vous changez ces deux bits de n bits, les résultats sont différents.
BTW, si je changeais 0xffffffff à ~ 1 + 1 (cela signifie que ~ (x + (~ 1 + 1)), le résultat est le même que ~ x + 1
Je me demande pourquoi cela est arrivé. Merci .
[Est-ce que "(uint16_t) -1" Code C Portable?] (Http://embeddedgurus.com/barr-code/2011/06/is-uint16_t-1-portable-c-code/) – Lundin
@Lundin Cet article est faux. '(uint16_t) -1' ** est ** garanti par le standard pour produire' 0xFFFF' si l'implémentation fournit ce type dans 'stdint.h'. (Bien sûr, rien n'est garanti si c'est votre propre typedef.) Il n'y a pas d'ambiguïté, les types à largeur fixe ne doivent pas contenir de bits de remplissage, donc ils ne sont même pas limités aux bits de valeur (eh bien, sont seulement des bits de valeur dans 'uintN_t'). –