Jump to content

Write in C

Оцени ову тему


Препоручена порука

@Grizzly Adams  vs @Juan  ( C vs функционално програмирање ) :) или ми се чини 

 

Иначе мој први програмски језик на ком сам научио основе програмирања

Link to comment
Подели на овим сајтовима

Link to comment
Подели на овим сајтовима

Ко жели да учи нека скине прву књигу и може одмах да испроба кодирање овде: http://www.tutorialspoint.com/compile_c_online.php

  • Волим 1
Link to comment
Подели на овим сајтовима

Ja sam onaj "Stari zavet" (ali prvo izdanje) negde pred kraj prošlog milenijuma (1997) imao i učio svoje prve korake......

Inače nisam programer al me zanimalo i bilo mi interesantno (a kasnije se pokazalo i vrlo korisno).

Link to comment
Подели на овим сајтовима

  • 2 months later...
int NumberOfSetBits(int i)
{
     i = i - ((i >> 1) & 0x55555555);
     i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
     return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer

 

Кад се сад нисам шлогирао, никад нећу... :)

Link to comment
Подели на овим сајтовима

int NumberOfSetBits(int i)
{
     i = i - ((i >> 1) & 0x55555555);
     i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
     return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer

 

Кад се сад нисам шлогирао, никад нећу... :)

 

Kakva perverzija brate  :0222_shocked:  :D

Link to comment
Подели на овим сајтовима

int NumberOfSetBits(int i)
{
     i = i - ((i >> 1) & 0x55555555);
     i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
     return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

http://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer

 

Кад се сад нисам шлогирао, никад нећу... :)

 

 

У Swift-u, наравно, може скоро исто тако:

func numberOfSetBits(var i: Int32) -> Int32 {
    i = i - ((i >> 1) & 0x55555555)
    i = (i & 0x33333333) + ((i >> 2) & 0x33333333)
    return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

Али може и другачије. У Swift-u нема примитивних типова, све су или структуре или уније дискриминатора или класе. Int32 je struct, па на њему можемо да дефинишемо методе:

extension Int32 {
    func multipledBy(anotherNumber: Int32) -> Int32 {
        return self * anotherNumber
    }
    
    func shiftedRightBy(numberOfBits: Int32) -> Int32 {
        return self >> numberOfBits
    }
    
    func bitwiseAnd(anotherNumber: Int32) -> Int32 {
        return self & anotherNumber
    }
    
    func plus(anotherNumber: Int32) -> Int32 {
        return self + anotherNumber
    }
}

И онда онај код може да се напише мало читљивије, бар мени:

let _1431655765: Int32 = 0x55555555
let _858993459: Int32 = 0x33333333
let _252645135: Int32 = 0x0F0F0F0F
let _16843009: Int32 = 0x01010101

func numberOfSetBits2(var i: Int32) -> Int32 {
    i = i - i.shiftedRightBy(1).bitwiseAnd(_1431655765)
    i = i.bitwiseAnd(_858993459) + i.shiftedRightBy(2).bitwiseAnd(_858993459)
    return
        i
            .shiftedRightBy(4)
            .plus(i)
            .bitwiseAnd(_252645135)
            .multipledBy(_16843009)
            .shiftedRightBy(24)
}

Немам појма да ли сам негде омашио, нити ми пада напамет да проверавам. Углавном,  добијам исти резултат. Добра ствар је што перформансе остају исте. :)

Link to comment
Подели на овим сајтовима

Придружите се разговору

Можете одговорити сада, а касније да се региструјете на Поуке.орг Ако имате налог, пријавите се сада да бисте објавили на свом налогу.

Guest
Имаш нешто да додаш? Одговори на ову тему

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Чланови који сада читају   0 чланова

    Нема регистрованих чланова који гледају ову страницу

×
×
  • Креирај ново...