Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [c#] AND di int (confronto bit)

    Ciao a tutti.
    Sto cercando di implementare una gestione dei privilegi per un programma multiutente.
    Pensavo di utilizzare le potenze di 2.
    In particolare potrei creare più privilegi es:
    privilegio1> 2
    privilegio2> 4
    Poi potrei assegnare ad un utente il privilegio 6.
    Per controllare se l'utente dispone del privilegio basterebbe fare un AND dei bit che compongono il numero.
    es
    6 && 2 dovrebbe dare true

    Però in c# non mi permette di utilizzare l'opeatore && con due valori di tipo intero.
    Qualcuno ha qualche idea su come potrei fare?
    OT:
    In particolare usavo questo sistema con php e funzionava:
    Codice PHP:
    <?php
    //questo codice stampa si
    $permessi_utente 6;
    $perm 4;
    if(
    $permessi_utente $perm)
        echo 
    "si";
    else
        echo 
    "no";
    ?>
    Grazie per l'attenzione

  2. #2
    credo che l'operatore che chiedi è il pipe (singolo) |
    a differenza del doppio pipe che è l'OR e non c'entra nulla

    si usa molto insieme agli enumeratori in questo modo:


    EDIT: Aggiungo esempio:

    codice:
    public enum Seasons
    {
        None = 0,
        Summer = 1,
        Autumn = 2,
        Winter = 4,
        Spring = 8
    }
    
    public void FaiQualcosa( Seasons eSeason)
    {
    ....
    ....
    }
    
    FaiQualcosa(Seasons.Summer | Seasons.Autumn)

  3. #3
    grazie della risposta, anche se per ora ho risolto così:
    Codice PHP:
    public bool haPrivilegio(int suoiint contr)
            {
                
    char[] permessiHa Convert.ToString(suoi2).ToCharArray();
                
    char[] controllareA Convert.ToString(contr2).ToCharArray();
                Array.
    Reverse(permessiHa);
                Array.
    Reverse(controllareA);
                
    String controllare = new String(controllareA);
                
    int pos controllare.IndexOf("1");
                
    String s;
                try
                {
                    
    = new String(permessiHa[pos], 1);
                }
                catch(
    IndexOutOfRangeException)
                {
                    return 
    false;
                }
                if (
    s.Equals("1"))            
                    return 
    true;            
                else
                    return 
    false;
            } 
    ho fatto qualche prova e sembra funzionare

  4. #4
    Devi usare il normale operatore &, esattamente come in PHP.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.