JaxTeller61 Ответов: 3

Вращать правую и левую программы без операторов? (< & lt;, >>)


For rotate binary numbers like 10101011, ı want to rotate the binary code n times(I am taking this from user). But ı dont know how can take array’s from user by 2d array or just normal array? And how can ı rotate witohut <<,>> ı am kind of a stuck in that.


(In C programming.)
Request


Что я уже пробовал:

Я просто беру двоичные коды от пользователя, но не могу вычислить вращение.

3 Ответов

Рейтинг:
16

OriginalGriff

Если вы имеете в виду, что читаете символы непосредственно от пользователя, то есть имеете дело с массивом символов, то нет, вы не можете использовать операторы сдвига для поворота чего-либо.
У вас есть варианты:
1) преобразуйте пользовательский ввод в число и поверните его с помощью операторов сдвига.
2) вручную поверните байты.

Первый тривиален, и вы должны быть в состоянии справиться с этим довольно легко.
Второй тоже прост, если вдуматься. Но... это звучит как домашнее задание, так что никакого кода!
Чтобы повернуть массив символов вправо, начните с правого конца.

  • Удалите последнюю цифру и сохраните ее во временном регистре.
  • Перебирайте оставшиеся байты, копируя каждый в индекс массива на один больший.
  • Когда вы переместите их все, поместите символ, который вы сохранили, в первую позицию.
  • Поворот влево-это почти та же операция, но с обратными направлениями.


    JaxTeller61

    Ладно, во-первых, спасибо за помощь. У меня есть один маленький вопрос. Когда я беру символы чтения непосредственно от пользователя. Пользователь должен быть введен как это 1 0 1 0 0 1 но учитель не может принять как это у меня есть проблемы с ho can I get like 101001 into char array.

    «_Superman_»

    Считывайте его как строку (массив символов), а не символ за символом - scanf("%s", arr);

    JaxTeller61

    Я просто пытаюсь спросить / / прочитать двоичное число в массив, но не могу определить свою проблему, но я могу понять ее np.

    Рейтинг:
    12

    JaxTeller61

    printf("\nEnter 8 bit binary number to perform shift and rotate operations:  ");
    	scanf_s("%d",&bin3);
    	b=bin3;
    	//read binary number to an array
    	//from lsb to msb
    	while(m<8)
    	{
    		shift_array[m]=bin3%10;
    		bin3=bin3/10;
    		m=m+1;
    	}
    	printf("\nHow many times you want to shift/rotate ");
    	scanf_s("%d",&j);
    	n=j;
    
    	//circular shift right
    
    	printf("\n\nCircular Shift/rotation (Right)\n");
    
    	while(j>0)
    	{
    		printf("%d",shift_array[j-1]);
    
    		j=j-1;;
    	}
    	bin3=b/pow(10.0,n);
    	if(bin3!=0){
    		printf("%d ",bin3);
    	}
    
    	//circular shift left
    	j=n;
    	printf("\n\nCircular Shift/rotation (	Left)\n");
    	while(j<8)
    	{
    		printf("%d",shift_array[7-j]);
    
    		j=j+1;
    	}
    	j=n;
    	while(j>0)
    	{
    		printf("%d",shift_array[7-k]);
    		k=k+1;
    		j=j-1;;
    	}


    Patrice T

    Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
    Чтобы каждый мог обратить внимание на эту информацию.

    Рейтинг:
    1

    Jochen Arndt

    В C/C++нет операции поворота (кругового сдвига).

    Вы можете использовать свою любимую поисковую систему для поиска реализаций. Хорошая связь есть Безопасный, эффективный и портативный поворот в C / C++ - встроенный в Академию[^].

    Чтобы повернуть значения, хранящиеся в массиве, просто выполните итерацию по элементам и примените вращение к каждому элементу.