1. Java / Говнокод #16553

    +70

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    *  Calculates the minimum number of bits necessary to represent the given number.  The
         *      number should be given in its unsigned form with the starting bits equal to 1 if it is
         *      signed.  Repeatedly compares number to another unsigned int called x.
         *      x is initialized to 1.  The value of x is shifted left i times until x is greater
         *      than number.  Now i is equal to the number of bits the UNSIGNED value of number needs.
         *      The signed value will need one more bit for the sign so i+1 is returned if the number
         *      is signed, and i is returned if the number is unsigned.
     * @param number the number to compute the size of
     * @param bits 1 if number is signed, 0 if unsigned
     */
        public static int minBits(int number, int bits)
        {
        int val = 1;
        for (int x = 1; val <= number && !(bits > 32); x <<= 1) 
        {
            val = val | x;
            bits++;
        }
    
        if (bits > 32)
                {
                        assert false : ("minBits " + bits + " must not exceed 32");
                }
        return bits;
    }

    Адоб, как обычно, порадовал (условие окончания цикла).
    [color=blue]https://git-wip-us.apache.org/repos/asf/flex-sdk/repo?p=flex-sdk.git;a=blob;f=modules/swfutils/src/java/flash/swf/SwfEncoder.java;h=03a100dda92989d537b00b 96033d614c73c47801;hb=HEAD#l320[/code]

    Запостил: wvxvw, 17 Августа 2014

    Комментарии (8) RSS

    • Вот так всегда, если не посмотреть, перед тем, как запостить.

      О, а еще умело использованый ассерт: только сейчас дошло...
      Ответить
    • извините за неровный почерк?
      Ответить
    • А assert это у нас что? Любопытства ради
      Ответить
      • Ассерт должен был быть:
        assert bits <= 32 : ("minBits " + bits + " must not exceed 32");

        Но это оказалось не по силам народным зодчим. Ну и вообще-то компилятор как-бы перевели на несклолько языков, а конкретно это место решили оставить как есть...
        Ответить
        • то бишь это некий юнит тест? Или оно какое то исключение хитро выбрасывает?
          Ответить
          • То же самое, что: http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.assert%28v=vs.1 10%29.aspx
            Ответить
    • Интересно, в каком месте тут unsigned)
      А использование bits весёленькое :D
      Ответить
    • Не слышал об Integer.numberOfLeadingZeros(i)
      Ответить

    Добавить комментарий