c언어

C언어 - Right shift

pi92 2021. 3. 2. 19:34
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

	int num, n;
	int i;
	int x = 0x80000000;
	scanf("%d %d", &num, &n);


	for (int i = 0; i < 32; i++) // 입력값 출력
	{
		if (i % 4 == 0 && i != 0)
			putchar(' ');

		if (num & (1 << (31 - i)))
			putchar('1');
		else
			putchar('0');
	}

	putchar('\n');

	//연산과정

	for (i = 0; i < n; i++) {

		if (num > 0) {  //양수일때
			if (num & 1) {
				//	num = ((num >> 1) | x); //끝에가 1일 때
				num = num >> 1;
				num = num | x;
			}
			else
				num = num >> 1;
		}
		else {  // 음수일떄
			if (num & 1)
				num = num >> 1;
			else {
				//	num = ((num >> 1) & (x - 1)); // 끝에가 0일 때
				num = num >> 1;
				num = num & (x-1);
			}
		}
	}

	for (int i = 0; i < 32; i++)  // 출력값 출력
	{
		if (i % 4 == 0 && i != 0)
			putchar(' ');

		if (num & (1 << (31 - i)))
			putchar('1');
		else
			putchar('0');
	}

	
	return 0;
}