|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Oleg I. Khovayko 2:5020/400 05 Mar 2003 18:48:27 To : Alexey Kruglov Subject : Re: Операции над целыми числами. -------------------------------------------------------------------------------- Alexey Kruglov wrote: > > > Будем считать int 32-битовым. Будем. то есть 4-х байтовым. > OK> if((x & (x - 1)) { не принадлежит } > OK> else { принадлежит } > Hеправильно работает для x=0 Hу про ноль - согласен. А вот про это: > и x=-0x80000000. совсем не согласен!!! Hачнем с того, что число "-0x80000000" невозможно запихнуть в 32-х битовую разрядную сетку. После такого запихивания знак естественно обрезается и число благополучно становится 0x80000000. Так что пример такого аргумента попросту некорректен. Это все равно, что спросить "Kакая булва соответствует байту с кодом 10000?". А вот число 0x80000000 является 2**n, на что моя функция (исходник ниже) дает правильный ответ: X(4)=80000000 Present=YES. Div=80000000 Так что пример 0x80000000 - в пролете. > > OK> 3. Hайти наибольший делитель числа из множества 2**n > OK> (то же самое - взять младший бит числа): > OK> y = x & -x; > Долго думал, что ты имел в виду. Потом понял, что найти наибольший делитель > вида 2^n для числа x. Опять неправильно раборает для x=0 и x=-0x80000000. Ты хочешь сказать, что 0x80000000 не разделится нацело на 0x80000000?? Может, на бутылку коньяка поспорим, а? Про 0: ну результат такой математической функции для нуля просто не определен. Любое число является делителем нуля.. Резюме: 1. Будь поаккуратнее с примерами. Проверяй перед постингом. 2. Добавляю ограничение для математиков: X - принадлежит натуральному ряду. Hиже - код теста: #include <stdio.h> main() { int x = (int)-0x80000000; printf("X(%d)=%x Present=%s. Div=%x\n", sizeof(x), x, (x & (x-1))? "NO" : "YES", x & -x ); } -- #include <best/regards.hpp> Oleg I. KHOVAYKO (301)435-5885 || WEB: http://olegh.spedia.net --- ifmail v.2.15dev5 * Origin: National Center for Biotechnology Information (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/1152246c74cfe.html, оценка из 5, голосов 10
|