[C/C++] Przesunięcia bitowe, bit znaku, postać szestnastkowa

faust1002
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 4 lis 2007, o 20:26
Płeć: Mężczyzna
Lokalizacja: Kamienna Góra
Podziękował: 1 raz

[C/C++] Przesunięcia bitowe, bit znaku, postać szestnastkowa

Post autor: faust1002 »

Witam, mam na zaliczenie napisać program który mnoży zmienną int w = -63 przez 4 i dzieli przez 8za pomocą. Długo nie myśląc napisałęm taki kod (pod g++, ale błąd występuje również w dev-c++, nie testowałem w BC)

Kod: Zaznacz cały

#include <iostream>

int main() {

    int w = -63;
    int w1;
    double w2;
    
    w1 = w << 2;
    printf("Zmienna w1 postaci dziesietnej w1 = %d postaci szestnastkowej w1 = %+#x
", w1, w1);
    
    w2 = w >> 4;
    printf("Zmienna w2 postaci dziesietnej w2 = %f postaci szestnastkowej w1 = %+#x
", w2, w2);

}
Postać dziesiętna jest wyświetlana poprawnie, szestnastkowa już nie (0xffffff04). Teraz pora na dzielenie, wchodzimy w tym zmiennoprzecinkowy. Wartość dziesiętna to -4, a szestnastkowa to zupełnie kosmos. Mogę sobie wypisać bit po bicie zmienną w2, ale czy to coś da? I jak napisać program?
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

[C/C++] Przesunięcia bitowe, bit znaku, postać szestnastkowa

Post autor: kadiii »

Pomijając fakt, ze dzielenie przez 8 to przesunięcie >> 3 to wyniki są prawidłowe - format w jakim wyświetla liczbę szesnastkowa jest inny od spodziewanego przez ciebie formatu znak-liczba. Mozna oczywiście to obejść usuwająć liczbę przed działaniem i dodająć znak po.
adampy
Użytkownik
Użytkownik
Posty: 10
Rejestracja: 2 lis 2009, o 17:46
Płeć: Mężczyzna
Lokalizacja: Milanówek
Pomógł: 1 raz

[C/C++] Przesunięcia bitowe, bit znaku, postać szestnastkowa

Post autor: adampy »

Przerzuć sięna c++... tam masz Cout, i jak poczytasz, to można ten kod (bez int main(), itd...) wepchnąć w 2 linijki...
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

[C/C++] Przesunięcia bitowe, bit znaku, postać szestnastkowa

Post autor: soku11 »

Każdy kod można w 2 linijki napisać. Nie ma to żadnego związku z językiem. Co do obiektu std::cout, to wcale nie jest on jakiś super. Zresztą akurat to nie ma tutaj żadnego znaczenia.

Pozdrawiam.
faust1002
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 4 lis 2007, o 20:26
Płeć: Mężczyzna
Lokalizacja: Kamienna Góra
Podziękował: 1 raz

[C/C++] Przesunięcia bitowe, bit znaku, postać szestnastkowa

Post autor: faust1002 »

A poza tym, muszę to napisać z wykorzystaniem funkcji printf(), a więc cout odpada
ODPOWIEDZ