반응형

데이터 저장방식이 3가지 있는데,

그냥 숫자를 저장 : 10진수

앞에 0x 로 시작하면 : 16진수

앞에 0으로 시작하면 : 8진수

모두 10진수 출력

#include "stdio.h"

int main()
{

	int num1 = 10;	// 10진수 저장
	int num2 = 0xA;	// 16진수 저장
	int num3 = 012;	// 8진수 저장

	printf("10진수 출력: %d, %d, %d\n", num1, num2, num3);

}

(결과) 결과를 보면

0xA는 16진수로 10진수 10을 의미한다.

012도 8진수로 10진수 10을 의미한다.

 

 

 

 

<각 진수로 출력하기>

#include "stdio.h"

int main()
{

	int num1 = 10;	// 10진수 저장
	int num2 = 0xA;	// 16진수 저장
	int num3 = 012;	// 8진수 저장

	printf("10진수 출력: %d\n", num1);
	printf("16진수 출력: %x\n", num2);
	printf("8진수 출력: %o\n", num3);
}

 

반응형
반응형

<printf 함수 사용법. (출력) >

printf("this is %d", 변수명)

예시)

#include "stdio.h"

int main()
{
	int a = 1;
	// 문자열만 출력
	printf("this is test\n");
	// 문자열과 변수와 함께 출력
	printf("this is %d", a);
}

 

반응형

 

 

<scanf 함수 사용법. (입력) >

scanf("%d", &변수명)

예시)

#include "stdio.h"

int main()
{
	int a;
	char b;
	float c;
	// 한개만 입력 받기
	scanf_s("%d", &a);
	// 3개 입력 받기, 정수형, 문자형, 실수형 (띄어쓰기로 구분자)
	scanf_s("%d %c %f", &a, &b, &c);
}
#include "stdio.h"

int main()
{
	int a;
	char b;
	float c;
	// 한개만 입력 받기
	scanf("%d", &a);
	// 3개 입력 받기, 정수형, 문자형, 실수형 (띄어쓰기로 구분자)
	scanf("%d %c %f", &a, &b, &c);
}

위 예를 보면 scanf 와 scanf_s 가 있다. 이는 두개가 같은것. scanf를 썼을 때 에러가 발생 할 수 있다. 그 경우 아래 참고.

https://ansan-survivor.tistory.com/899

 

[Visual Studio 2019] 비주얼 스튜디오 2019 scanf_s 오류, scanf 사용하기 변경

예전에는 scanf 를 상용함에 있어 문제가 없었는데, 비쥬얼스튜디오가 계속업그레이드가 되면서 scanf_s를 사용하지 않으면 오류를 일으킨다. 따라서 이 에러를 해제 시키고 예전처럼 scanf를 사용

ansan-survivor.tistory.com

(결과) 

한개만 입력할때는 int 형이므로 숫자를 입력.

3개 입력시 띄어쓰기 구분자, 각 타입에 맞게 입력.

 

 * C언어의 문자열을 scanf로 사용하는 방법 아래 참고. (문자열 배열)

https://ansan-survivor.tistory.com/1236

 

[C언어] C언어 문자열 배열 만들기, 구조에 대해서, scanf 문자열 출력

C언어는 문자열을 표현하기 위해 배열(Array)를 활용한다. 그리고 문자열을 표현하기 위해 보통 1byte 크기인 'char' 타입을 사용한다. 문자열의 끝은 NULL을 사용한다. (문자열 마지막에 \0 이 있으면

ansan-survivor.tistory.com

 

반응형
반응형

아래 코드는 사용자에게 입력을 받는 scanf 함수를 사용한다.

비주얼스튜디오에서 scanf를 사용시 발생하는 에러에 대한 내용 아래 참고.

https://ansan-survivor.tistory.com/899

 

[Visual Studio 2019] 비주얼 스튜디오 2019 scanf_s 오류, scanf 사용하기 변경

예전에는 scanf 를 상용함에 있어 문제가 없었는데, 비쥬얼스튜디오가 계속업그레이드가 되면서 scanf_s를 사용하지 않으면 오류를 일으킨다. 따라서 이 에러를 해제 시키고 예전처럼 scanf를 사용

ansan-survivor.tistory.com

 

아래 함수는 사용자에게 연산자(덧셈, 뺄셈, 곱셈, 나눗셈)를 입력 받고 값 2개를 계산하는 코드이다.

 

C언어에서 사용하는 If, else, if else 문에 대한 예시, 조건에 만족하면 진행하고 그렇지 않으면 통과한다.

그리고, do - while 반복문을 사용했다. (조건이 맞을때까지 반복하고, 조건이 맞으면 탈출)

사용한 비교 연산은 == AND연산, 두 조건이 내가 넣은 값 (char)이 일치해야 수행

#include <stdio.h>

int main(void)
{
	char  x;
	int a, b, result;

	printf("********************\n");
	printf("A----Add\n");
	printf("S----Subtract\n");
	printf("M----Muliply\n");
	printf("D----Divide\n");
	printf("Q----Quit\n");
	printf("********************\n\n");

	do
	{
		printf("[A,S,M,D,Q]에서 연산을 선택하시오:");
		scanf_s(" %c", &x);

		if (x == 'A')
		{
			printf("두수를 공백으로 분리하여 입력하시오: ");
			scanf_s("%d %d", &a, &b);
			result = a + b;

			printf("연산의 결과는 %d\n", result);
		}
		else if (x == 'S')
		{
			printf("두수를 공백으로 분리하여 입력하시오: ");
			scanf_s("%d %d", &a, &b);
			result = a - b;

			printf("연산의 결과는 %d\n", result);
		}
		else if (x == 'M')
		{
			printf("두수를 공백으로 분리하여 입력하시오: ");
			scanf_s("%d %d", &a, &b);
			result = a * b;

			printf("연산의 결과는 %d\n", result);
		}
		else if (x == 'D')
		{
			printf("두수를 공백으로 분리하여 입력하시오: ");
			scanf_s("%d %d", &a, &b);
			result = a / b;

			printf("연산의 결과는 %d\n", result);
		}
		else if (x == 'Q')
		{
			break;
		}
		else
		{
			printf("잘못입력하셨습니다. 다시 입력하세요\n");
		}
	} while (x == 'A', 'S', 'M', 'D', 'Q');   // 이곳이 거짓이면 다시 반복하여 실행.

	return 0;
}

 

(실행 결과)

A면 덧셈연산을 수행, 그리고 값을 넣고 엔터, 또다른 값을 넣고 엔터를 누르면 연산결과 값이 출력된다.

또는 한줄에 연산자와 숫자를 띄어쓰기를 기준으로 값을 넣으면 연산이 된다.

 

만약 Q를 입력하면 break; 함수를 통해 while 반복문을 탈출한다.

 

 

 

 

 

반응형
반응형

비트연산의 Shift는 비트를 우측, 좌측으로 이동시켜주는 연산자이다.

아래 예시를 보면 쉽게 이해할 수 있다.

예를들어 0001 을 << 연산하면 좌측으로 1칸 이동하는 것이고, >> 연산하면 우측으로 이동시키는 것이다.

 

<좌측으로 Shift 연산>

#include<stdio.h>
#include<string.h>


int main()
{
	int num = 15;								// 00000000 00000000 00000000 00001111
	int result1 = num << 1;						// 00000000 00000000 00000000 00011110
	int result2 = num << 2;						// 00000000 00000000 00000000 00111100
	int result3 = num << 3;						// 00000000 00000000 00000000 01111000

	printf("왼쪽으로 1칸 이동 : %d\n", result1);
	printf("왼쪽으로 2칸 이동 : %d\n", result2);
	printf("왼쪽으로 3칸 이동 : %d\n", result3);

	return 0;
}

반응형

 

<우측으로 Shift 연산>

#include<stdio.h>
#include<string.h>


int main()
{
	int num = 15;								// 00000000 00000000 00000000 00001111
	int result1 = num >> 1;						// 00000000 00000000 00000000 00000111
	int result2 = num >> 2;						// 00000000 00000000 00000000 00000011
	int result3 = num >> 3;						// 00000000 00000000 00000000 00000001

	printf("오른쪽으로 1칸 이동 : %d\n", result1);
	printf("오른쪽으로 2칸 이동 : %d\n", result2);
	printf("오른쪽으로 3칸 이동 : %d\n", result3);

	return 0;
}

* 주의사항 * 

 ">>" 연산자는  일반적으로 안쓰는 것이 좋다. (호환성이 부족, 다만 CPU의 호환성 여부를 알고 있다면 사용가능)

연산자는 CPU따라 다른데, MSB(가장 왼쪽 끝 비트)에 0을 채울수도 있고, 1을 채울 수도 있다. 대부분의 인텔 CPU는 아래와 같은 결과를 얻을 수 있지만, AMD CPU는 다른결과를 얻을 수 있다.

간혹 일부 CPU는 >> 연산시 0을 가져오는 CPU들도 있다.

11110000 >> 1  했을 때,  결과로

01111000 이 나올 수 있다. (양수)

이 점을 잘 유의해야 한다.

 

 

비트연산자 AND, OR, XOR, NOT 에 대해서는 아래 참고

https://ansan-survivor.tistory.com/1173

 

[C언어] C언어 비트연산자 AND, OR, NOR, NOT 예제 코드

비트연산의 기초 연산자 4개 예제 코드 32비트 PC는 아래와 같이 총 비트 갯수가 32개이다. 비트 연산을 해서 결과값을 int형으로 확인 AND연산 (둘다 1이어야 1을 반환) 0 & 0 0반환 0 & 1 0반환 1 & 0 0반

ansan-survivor.tistory.com

 

반응형
반응형

비트연산의 기초 연산자 4개 예제 코드

32비트 PC는 아래와 같이 총 비트 갯수가 32개이다.

비트 연산을 해서 결과값을 int형으로 확인

 

 

 

AND연산 (둘다 1이어야 1을 반환) "&"

0 & 0 0반환
0 & 1 0반환
1 & 0 0반환
1 & 1 1반환

#include <stdio.h>

int main(void)
{
	int num1 = 15;				// 00000000 00000000 00000000 00001111
	int num2 = 20;				// 00000000 00000000 00000000 00010100

	int num3 = num1 & num2;			// 00000000 00000000 00000000 00000100
	
	printf("AND연산 결과 : %d", num3);
}

num2 &= 3 의미 : num2에 0000 0101을 AND연산해라

 

==========================================

 

OR연산 (둘중 하나라도 1이면, 1을 반환) "|"

0 | 0 0반환
0 | 1 1반환
1 | 0 1반환
1 | 1 1반환

#include <stdio.h>

int main(void)
{
	int num1 = 15;				// 00000000 00000000 00000000 00001111
	int num2 = 20;				// 00000000 00000000 00000000 00010100

	int num3 = num1 | num2;		// 00000000 00000000 00000000 00011111
	
	printf("OR연산 결과 : %d", num3);
}

 num2 |= 3 의미 : num2에 0000 0101을 OR연산해라 



==========================================

 

 

XOR연산 (두개가 같으면 0반환, 두개가 다르면 1반환) "^"

0 ^ 0 0반환
0 ^ 1 1반환
1 ^ 0 1반환
1 ^ 1 1반환

#include <stdio.h>

// AND연산자
int main(void)
{
	int num1 = 15;				// 00000000 00000000 00000000 00001111
	int num2 = 20;				// 00000000 00000000 00000000 00010100

	int num3 = num1 ^ num2;	// 00000000 00000000 00000000 00011011
	
	printf("OR연산 결과 : %d", num3);
}

 

 

 

NOT연산 (서로 다른 값을 반환) "~"

~ 0 1반환
~ 1 0반환

#include <stdio.h>

int main(void)
{
	int num1 = 15;				// 00000000 00000000 00000000 00001111
	int num2 = ~num1;			// 11111111 11111111 11111111 11110000

	
	printf("NOT연산 결과 : %d", num2);
}

 

 

비트를 좌우로 한칸씩 이동시키는 Shift 연산자에 대해서는 아래 참고.

https://ansan-survivor.tistory.com/1174

 

[C언어] 비트연산자 Shift 예제 (<<, >> 한 비트씩 움직이기)

비트연산의 Shift는 비트를 우측, 좌측으로 이동시켜주는 연산자이다. 아래 예시를 보면 쉽게 이해할 수 있다. 예를들어 0001 을 << 연산하면 좌측으로 1칸 이동하는 것이고, >> 연산하면 우측으로

ansan-survivor.tistory.com

 

반응형
반응형

 

유저가 막대의 갯수를 1~50개 사이로 입력하면 별 막대가 생성됨.

#include <stdio.h>

int main()
{
	int i, j, x;
	int k;


	i = 1;
	for (j = 0; j < i; j++)
	{
		printf("막대의 높이(종료: -1):");
		scanf("%d", &x);

		if (x < 1 || 50 < x)
		{
			printf("1 부터 50 사이에서 입력하시오.\n");
			continue;
		}

		for (i = 1; i <= x; i++)
		{
			printf("*");
		}
		printf("\n");    // 끝났을때, i=11, j=0
		//break;
	}

	return 0;
}

 

(결과)

 

삼각 별찍기는 아래 참고

https://ansan-survivor.tistory.com/904

 

[C언어] C언어 줄 입력받아 삼각형 별찍기

아래 예제는 유저가 줄의 갯수를 입력하면 갯수만큼 삼각형의 *을 만들어준다. (scanf 가 에러 발생시 아래 참고) https://ansan-survivor.tistory.com/899 [Visual Studio 2019] 비주얼 스튜디오 2019 scanf_s 오..

ansan-survivor.tistory.com

 

반응형
반응형

아래 코드는 사용자의 입력을 받아 만약 대문자면 소문자로 변환시키고, 소문자면 대문자로 변환시키는 코드이다.

원래 gets 함수를 사용했지만, visual studio에서는 gets_s를 써야 한다고 한다... 그 이유는

 

 최신 visual studio에서는 gets는 사용하지 않게 하고 gets를 오버로드한 gets_s를 사용하라고 권장합니다. 

gets의 문제는 버퍼 오버플로우가 날 수 있기 때문에, 그것을 방지 하기 위해서 조금 안전하게 gets_s를 만들어서 제공하는 것 입니다.

출처: https://blockdmask.tistory.com/343 [개발자 지망생]

 

라고 한다.

 

#include<stdio.h>
#include<string.h>


int main()
{
	char str[100];

	printf("write down:\n");
	gets_s(str);


	for (int i = 0; str[i]; i++)
	{
		if (str[i] >= 65 && str[i] <= 90)
		{
			str[i] = str[i] + 32;                       // 대문자->소문자
		}
		else if (str[i] >= 97 && str[i] <= 122)         // 소문자->대문자
		{
			str[i] = str[i] - 32;
		}
	}
	printf("%s\n", str);

	return 0;
}

 

(실행 결과)

반응형

소문자 abcd를 입력하면, ABCD로 변환된다.

대문자 APPLE 입력하면 소문자 apple으로 변환된다.

대소문자를 섞어쓰면?

소문자->대문자로 변환

대문자->소문자로 변환

위 코드를 응용해서 쓰길 바란다.

 

 

(문자로 입력받은 아스키코드 char타입을 연산이 가능한 int형으로 변환하는 예제 코드)

https://ansan-survivor.tistory.com/1034

 

[C언어] c언어 char -> int 변환 (C언어 문자열 정수 변환, 아스키코드 변환)

아래 char[] 배열 내에 String형태로 "1234"를 넣었다. 이 내부에 1234는 정수형 타입이 아니고 문자형태이다. 즉 아스키코드가 49,50,51,52,NULL 이렇게 들어간 것이다. 이를 정수형태 integer 형태로 바꿔주

ansan-survivor.tistory.com

 

반응형
반응형

 

아래 char[] 배열 내에 String형태로 "1234"를 넣었다.

이 내부에 1234는 정수형 타입이 아니고 문자형태이다. 즉 아스키코드가 49,50,51,52,NULL 이렇게 들어간 것이다.

이를 정수형태 integer 형태로 바꿔주는 함수이다.

 

#include<stdio.h>
#include<string.h>

int convert(char a[],int num);

int main()
{
	char a[] = "1234";   //  문자열 아스키코드 [49,50,51,52,null] 이 입력된 상태.
	int num=0;

	num = convert(a,num);
	printf("%d", num);

	return 0;
}

int convert(char a[],int num)
{
	
	for (int i = 0; a[i]; i++)
	{
		a[i] = a[i] - 48;
		num = num * 10;
		num = num + a[i];
	}
	return num;
}

 

 

(결과)

반응형

위 함수를 통과하면 실제 정수(int) 형태인 1234가 나오게 된다.

 

(C언어 아스키코드를 대문자를 소문자로, 소문자를 대문자로 변환시켜주는 코드)

https://ansan-survivor.tistory.com/1035

 

[C언어] c언어 소문자 대문자 변환, 대문자 소문자 변환

아래 코드는 사용자의 입력을 받아 만약 대문자면 소문자로 변환시키고, 소문자면 대문자로 변환시키는 코드이다. 원래 gets 함수를 사용했지만, visual studio에서는 gets_s를 써야 한다고 한다... 그

ansan-survivor.tistory.com

 

 

 

반응형
1···456789

+ Recent posts