• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Operacja bitowa na unsigned char

VPS Starter Arubacloud
+1 głos
218 wizyt
pytanie zadane 31 października 2019 w C i C++ przez Programmingc100 Bywalec (2,620 p.)
unsigned char a,b;

  scanf("%hhu %hhu", &a, &b);
  printf("%hhu", a & b);

Nie wiem dlaczego ale ten kod zwraca zawsze 0 ...

2 odpowiedzi

+1 głos
odpowiedź 31 października 2019 przez mokrowski Mędrzec (155,460 p.)
wybrane 13 lipca 2020 przez Programmingc100
 
Najlepsza
Nie przypisałeś wartości do zmiennych i miałeś szczęście/nieszczęście (wybierz jedno), że dane bity wynosiły 0 akurat w tych miejscach pamięci.
komentarz 31 października 2019 przez Programmingc100 Bywalec (2,620 p.)
Ale za pomocą scanf przypisuję wartości chyba, czy nie?
1
komentarz 31 października 2019 przez mokrowski Mędrzec (155,460 p.)
Jasne... ale ... jakie? :)
komentarz 31 października 2019 przez Programmingc100 Bywalec (2,620 p.)

@mokrowski, typu unsigned char

1
komentarz 31 października 2019 przez mokrowski Mędrzec (155,460 p.)

Powiedz mi kolego jakie dane wczytujesz do programu bo scanf(...) pyta o dane na konsoli. Nie napisałeś jakie :) Jak podasz: 255 0, to zrozumiałe że otrzymasz 0. Jak: 32 16 to także 0. Więc... jakie? Typ danych nie ma tu (akurat) wpływu na problem.

BTW. Inicjalizuj zmienne.... zawsze.

komentarz 1 listopada 2019 przez Programmingc100 Bywalec (2,620 p.)

@mokrowski, Podaję właśnie podobnie jak Ty, np 5 i 1, 6 i 7 itp i wciąż jest ...0.

1
komentarz 1 listopada 2019 przez mokrowski Mędrzec (155,460 p.)
#include <stdio.h>

int main(void) {
    unsigned char a,b;

    scanf("%hhu %hhu", &a, &b);
    printf("%hhu\n", a & b);

    return 0;
}

Kompilacja:

gcc -o prog prog.c

Uruchomienie z podaniem argumentów:

echo "5 1" | ./prog

Wynik:

1

Wszystko na konsoli GNU/Linux.

Oczywiście jeśli nie chcesz automatu, podawaj oddzielone spacją liczby po uruchomieniu programu.

Nie wiem co mam powiedzieć... "u mnie działa"? :/

komentarz 1 listopada 2019 przez Programmingc100 Bywalec (2,620 p.)

@mokrowski, Ja kompiluje na Windows 10

#include <stdio.h>

int main() {
    unsigned char a,b;

    scanf("%c %c", &a, &b);
    printf("%c", a & b);


}

Taki kod działa ale tylko dla liczb z 0 do 9.

komentarz 1 listopada 2019 przez mokrowski Mędrzec (155,460 p.)
Przecież %c to znak! Ty chcesz wprowadzić liczby. Więc format to z całą pewnością nie %c.

Tak prosty program i w tym zakresie, bez problemu zadziała także na MS Win. Jeśli jednak będziesz pisał coś bardziej zaawansowanego, nie radzę co do C korzystać z kompilatora VS. C (ale nie C++) w Visual Studio, jest mocno zaniedbane i nie w pełni wspiera nawet C90.

O wiele sensowniejszym wyborem jest MinGW-W64.
0 głosów
odpowiedź 31 października 2019 przez adrian17 Ekspert (344,100 p.)
edycja 31 października 2019 przez adrian17

U mnie działa.

https://asciinema.org/a/AYE4tJSlejPIe0v0Gs2JSG2wl

(z dokładnością do jednego ostrzeżenia clanga przy printf, że a&b jest typu int co nie zgadza się z formatem %hhu)

komentarz 31 października 2019 przez mokrowski Mędrzec (155,460 p.)
Oczywiście że działa. Tylko trzeba podać sensowne dane. Bo przy EOF (co zapewne robi IDE pytającego), wynik będzie nieustalony.

Podobne pytania

0 głosów
2 odpowiedzi 789 wizyt
pytanie zadane 11 września 2016 w C i C++ przez rubiikk Obywatel (1,900 p.)
0 głosów
3 odpowiedzi 194 wizyt
pytanie zadane 6 września 2016 w C i C++ przez rubiikk Obywatel (1,900 p.)
0 głosów
0 odpowiedzi 1,303 wizyt
pytanie zadane 25 stycznia 2018 w C i C++ przez mar25 Nowicjusz (140 p.)

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...