Anzeige

Funktionen


Skyraz00

Grünschnabel
#1
Hallo,
ich habe ein Programm geschrieben welches zwei bytes invertiert, setzt und löscht.
Jetzt wollte ich jeden Schritt in eine eigene Funktion packen und habe dabei einen Fehler gemacht den ich
nicht finde.
Wenn mir jemand sagen könnte was ich falsch gemacht habe wäre mir sehr geholfen.

MfG Skyraz00

C:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>


void bitnInvert(uint8_t number1, uint8_t mask);
void bitnSet(uint8_t number1, uint8_t setBits);
void bitnClear(uint8_t number1, uint8_t number2);
void displayBits(uint8_t value); // prototype

void main()
{
    uint8_t number1 = 217;
    uint8_t number2 = 43;
    uint8_t mask = 1;
    uint8_t setBits = 241;
    uint8_t value;

    bitnInvert(number1, mask);
    bitnSet(number1, setBits);
    bitnClear(number1, number2);
    displayBits(value);
    
} // end main

void bitnInvert(uint8_t number1, uint8_t mask)
{
    // demonstrate bitwise AND (&)
    puts("The result of combining the following");
    displayBits(number1);
    displayBits(mask);
    puts("using the bitwise AND operator & is");
    displayBits(number1 & mask);
}

void bitnSet(uint8_t number1, uint8_t setBits)
{
    // demonstrate bitwise inclusive OR (|)
    puts("\nThe result of combining the following");
    displayBits(number1);
    displayBits(setBits);
    puts("using the bitwise inclusive OR operator | is");
    displayBits(number1 | setBits);
}

void bitnClear(uint8_t number1, uint8_t number2)
{
    // demonstrate bitwise exclusive OR (^)
    puts("\nThe result of combining the following");
    displayBits(number1);
    displayBits(number2);
    puts("using the bitwise exclusive OR operator ^ is");
    displayBits(number1 ^ number2);
}

// display bits of an unsigned int value
void displayBits(uint8_t value)
{
    uint8_t i; // loop counter
    // define mask and left shift 31 bits
    uint8_t SHIFT = 8 * sizeof(value) - 1;
    uint8_t MASK = 1 << SHIFT;

    printf("%hhu = ", value);

    // loop through bits
    for (i = 1; i <= SHIFT + 1; ++i) {
        putchar(value & MASK ? '1' : '0');
        value <<= 1; // shift value left by 1

        if (i % 8 == 0) { // output space after 8 bits
            putchar(' ');
        } // end if
    } // end for

    puts("");
} // end function displayBits
 

cwriter

Erfahrenes Mitglied
#2
Jetzt wollte ich jeden Schritt in eine eigene Funktion packen und habe dabei einen Fehler gemacht den ich
nicht finde.
Wenn mir jemand sagen könnte was ich falsch gemacht habe wäre mir sehr geholfen.
Wenn du uns sagst, was denn falsch ist (Eingabe -> Ausgabe und erwartete Ausgabe), dann ginge das immer schneller.
So aus dem Stegreif sehe ich bei dir vor allem, dass XOR als bitnClear und AND als bitnInvert bezeichnet wird. Das scheint mir etwas seltsam.
Ansonsten ist mir nicht wirklich klar, wie die Funktionen überhaupt funktionieren sollen. bitnX tönt für mich nach: Wende Operation X auf bit n an, nicht: "Wende eine einfache Operation wie & auf 2 Bytes an".

Aber eben: Ich weiss nicht, was das Ziel ist und was deiner Meinung nach nicht funktioniert...

Gruss
cwriter
 
Anzeige
Anzeige