Bitműveleteknél unsigned int-nél miért jön ki negatív szám? (C-ben)
#include <stdio.h>
unsigned int a = 60;
unsigned int b = 13;
unsigned int c = 0;
main()
{
c = a & b;
printf("c=%d\n", c);
c = a | b;
printf("c=%d\n", c);
c = a ^ b;
printf("c=%d\n", c);
c = b << 3;
printf("c=%d\n", c);
c = a >> 3;
printf("c=%d\n", c);
c = ~ a;
printf("c=%d\n", c);
system("pause");
}
A legutolsó műveletnél -61-et ad, holott szerintem ha a bitenkénti tagadást végezné akkor 195 kellene legyen.
Mi lehet a hiba?
Ahogy az első válaszoló mondja. A printf nem végez típusellenőrzést, odaadsz neki valamit hogy nesze %d, akkor ő azt intként fogja értelmezni és kiírni, akármi is volt azelőtt. És mivel kettes komplemensű ábrázolást használ, a legmagasabb bit pedig a == 60 esetén 0, így a negálásával az 1 lesz, és negatív szám.
De mondjuk nem is értem, hogy hogy akarsz 195-t. Max akkor, ha sizeof(int) == 1, de az egy elcseszett platform akkor.
" mivel 60 = 0011 1100"
Nem.
60= 0000 0000 0000 0000 0000 0000 0011 1100.
Ezt tagadd bitenként.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!