
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.100] |
![]() |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
А частное?
![]() |
![]() |
Сообщ.
#17
,
|
|
А нет ли способа "мгновенно" найти разложение для -Z из разложения для +Z ?
![]() ![]() +123456789 11000101011001101110100010101 -123456789 1001111001000111011100111111 +345634295858585858375757682846739644999374848484657282929292929234215673853 1110001001110001101000001100100001001010101011100110110100001111011010011000111111100 1110111010100101000101000000011110001000011011101011010000110101111010001011010000001 1100101000010011000001011010110001010111000000111100101001001011110000000001101 -345634295858585858375757682846739644999374848484657282929292929234215673853 1101001101101000011100000010110001101111111111010001001110000010100111000100110101010 1101110111110111100111100000000101001100000111011100111000001110010111001100111000001 10101111000110001000011001110010011111101000000010101111011011001010000000000111 |
Сообщ.
#18
,
|
|
|
Цитата albom @ А частное? ![]() опять таки...-(частное)%-2 дает положительный результат, как я понял то что нужно (частное)%2 то же самое (частное)%-2 дает отрицательный результат и мы пренебрегая минусом записываем положительное число -(частное)%2 -то же самое в результате имеем, что в любом случае мы пренебрегаем отрицательным результатом.............. |
![]() |
Сообщ.
#19
,
|
|
итого, как бонус мы получаем 2 = -2 !
![]() |
Сообщ.
#20
,
|
|
|
Цитата darcus @ Нет, и не может быть, так как сложность алгоритма не может быть меньше битового размера выхода.А нет ли способа "мгновенно" найти разложение для -Z из разложения для +Z ? А вообще, знак в этой системе счисления у числа можно изменить двумя способами. Первый состоит в том, что мы складываем число с самим собой сдвинутым влево на один разряд. Второй способ состоит в вычитании из нуля нашего числа. Но учти, что даже сложнение в этой системе несколько необычно, так как сумма двух битов может порождать до двух битов переноса. Например, 1 + 1 = 110 11 + 1 = 0 1 + 1 + 1 = 111 Цитата kiryshka @ А какое отношение все это имеет к исходной задаче? опять таки...-(частное)%-2 дает положительный результат, как я понял то что нужно (частное)%2 то же самое (частное)%-2 дает отрицательный результат и мы пренебрегая минусом записываем положительное число -(частное)%2 -то же самое в результате имеем, что в любом случае мы пренебрегаем отрицательным результатом. ![]() |
Сообщ.
#21
,
|
|
|
Цитата albom @ А какое отношение все это имеет к исходной задаче? ![]() может я что то недопонимаю? 10: 10%-2=0 -5%-2=1 2%-2= 0 -1%-2=1 ![]() |
Сообщ.
#22
,
|
|
|
Цитата kiryshka @ Вероятно, да. А именно, как разделить одно число на другое.может я что то недопонимаю? Правильно деление будет выглядеть так: 10 / -2 = -5 rem 0 -5 / -2 = 3 rem 1 3 / -2 = -1 rem 1 -1 / -2 = 1 rem 1 1 / -2 = 0 rem 1Правильный ответ: 1010 = 11110-2, а вовсе не то, что у тебя получилось. |
Сообщ.
#23
,
|
|
|
![]() |
Сообщ.
#24
,
|
|
|
Прошу высказываться. только для положительный целых чисел
![]() ![]() #include <stdio.h> #include <math.h> int binarinegativ(int X){ int d =2,B,C,X1; X1 = X; printf("foundation (2) %d = %0.4X\n",X,X); do{ B = X & d; d *= 2; if(B) X += d; C = (int)( log(X)/log(2) ) ; C = (int)pow(2,C); }while(d < C ); printf("foundation (-2) %d = %0.4X\n",X1,X); return X; } int main(void){ int V; while(1){ puts("Input digit, 0 fo exit\n"); if(!V) break; scanf("%d",&V); binarinegativ(V); getchar(); } return 0; } |
Сообщ.
#25
,
|
|
|
Цитата AndreyK @ Прошу высказываться. только для положительный целых чисел ![]() Не работает ни для положительных, ни для отрицательных. Кстати, можешь попробовать сделать через формулу Шреппеля: B = (N xor 0b10101010101010...) - 0b1010101010.... |
![]() |
Сообщ.
#26
,
|
|
это была попытка сделать *что*?
|
Сообщ.
#27
,
|
|
|
Приношу свои звинения за предыдущий вариант.
Этот, вроде, работает. Раскладка натурального числа по основанию(-2) X = k*(-2)i; где k 1 или 0,i - нумер разряда(нумерация от младшего к старшему начиная с нуля). Опять же прошу высказываться. ![]() ![]() #include <stdio.h> #include <math.h> int binarinegativ(int X){ int d =2,B,C,X1; X1 = X; printf("foundation (2) %d = %0.4X\n",X,X); do{ B = X & d; if(B) X += (d*2); d *= 4; C = (int)( log(X)/log(2) ) ; C = (int)pow(2,C); }while(d <= C ); printf("foundation (-2) %d = %0.4X\n",X1,X); return X; } int main(void){ int V; while(1){ puts("Input digit, 0 fo exit\n"); if(!V) break; scanf("%d",&V); binarinegativ(V); getchar(); } return 0; } |
Сообщ.
#28
,
|
|
|
Цитата AndreyK @ Увы, и этот вариант не работает. Неужели так сложно самостоятельно проверить хотя бы первые десять натуральных чисел? Ведь уже на них выдается неверный ответ. Этот, вроде, работает. ![]() Цитата AndreyK @ Я не очень понимаю смысл выкладывать вот эти исходники.Опять же прошу высказываться. Во-первых, это не алгоритм, а код, причем код очень непонятный, который к тому же не работает. Во-вторых, в этой теме уже приведено решение, даже есть работающий исходник. Почему не сравниваешь свою реализацию с ним? И в-третьих, просили разложить "Быстро и карсиво", а тут увы нет ни того, ни другого. Короче, давай, испрявляйся по всем пунктам, и показывай, что у тебя там получилось ![]() |