Bittioperaattorit

Alla oleva bittioperaattoria hyödyntävä koodi vähentää 32 pienen kirjaimen biteistä sammuttamalla binäärisen AND-operaattorin kuudennen bitin 1111 1111 1101 1111 jonon avulla joka on 65503 kymppijärjestelmässä.

Minulle jää epäselväksi, miksi tämä toimii aina. Mikä takaa sen että alkuperäisessä charissa kyseinen merkki on päällä ja että sen siten voi sammuttaa? Jos alkuperäisen charin kuudes merkki on nolla, vähentääkö bittioperaatio AND silloinkin ko. lukua, kun toisena operandina on 65503? MEli mitä minä ymmärrän tässä väärin?


//Isot kirjaimet

class Isot
{
public static void main(String[] args)
{
   char ch;
   for(int i=0; i
2630
Äänestä

Muut lukivat myös

Vastaukset 2

Vanhimmat

koska AND muuttaa tuloksen nollaksi, kun jompi kumpi on nolla. Jos me nollalla "ändätään", niin tulos on nolla.

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

Jos joku bitti halutaan ykköseksi, niin sitten "oorataan" ykkösellä, koska silloinhan ainakin toinen on aina 1 ja tulos silloin 1.

Äänestä

Kyseinen operaatio sammuttaa siis sen bitti numero viitosen. Jos bitti ei ole päällä, niin tällöin kyseisellä AND operaatiolla ei ole vaikutusta. Alla on esimerkki koodi joka havainnollistaa kyseistä asiaa.

Koodisi toimii koska ASCII merkistön kirjaimia ei ole numeroitu/koodattu satunnaisesti, vaan merkistön koodaamisessa on otettu huomioon myös helppokäyttöisyys, (eli kun muutat yhtä bittiä, saat kirjaimesta ison tai pienen). Tulee kuitenkin muistaa että Javassa voi käyttää Unicode merkistöä, jolloin koodisi ei välttämättä toimi. Jos esimerkiksi katsot merkistöä väliltä U 0100 - U 01FF, joka on latinalainen (laajennetu-A) (Näet sen Wordin merkistöstä tai http://www.unicode.org/charts/PDF/U0100.pdf linkin kautta), niin tämä merkistö/väli on koodattu puolestaan siten että isolla ja pienillä kirjaimella on yhden numeron ( /-1) ero (jolloin bitti numero nollaa muuttamalla saa kirjaimen käännettyä isoksi tai pieneksi).

Tuota tapaa ei kannata käyttää jos ei tiedä missä ja miksi se toimii, vaan silloin kannattaa käyttää Character.toUpperCase() ja Character.toLowerCase() metodeita.


--- ESIMERKKI ALKAA ---

public class Esimerkki {
   public static void main(String[] args)
   {
      int mask = ~(1 -36; i--)
         System.out.println(i " & mask = " (i & mask));   
   }
}

--- ESIMERKKI LOPPUU

Äänestä

Kommentoi aloitusta


RailiZX kirjoitti:

Alla oleva bittioperaattoria hyödyntävä koodi vähentää 32 pienen kirjaimen biteistä sammuttamalla binäärisen AND-operaattorin kuudennen bitin 1111 1111 1101 1111 jonon avulla joka on 65503 kymppijärjestelmässä.

Minulle jää epäselväksi, miksi tämä toimii aina. Mikä takaa sen että alkuperäisessä charissa kyseinen merkki on päällä ja että sen siten voi sammuttaa? Jos alkuperäisen charin kuudes merkki on nolla, vähentääkö bittioperaatio AND silloinkin ko. lukua, kun toisena operandina on 65503? MEli mitä minä ymmärrän tässä väärin?


//Isot kirjaimet

class Isot
{
public static void main(String[] args)
{
   char ch;
   for(int i=0; i

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu