π₯Έ μ λ² ν¬μ€ν μμ 1μ₯λΆν° 3μ₯κΉμ§ λ€λ£¨μλ€. μ΄λ² ν¬μ€ν μμλ 4μ₯λΆν° 5μ₯κΉμ§ λ€λ£¨μ!
4. λ°μ΄ν° ννλ°©μμ μ΄ν΄
β μ§λ²μ μ΄ν΄
→ 2μ§μλ λ κ°μ κΈ°νΈ(0κ³Ό 1)λ₯Ό μ΄μ©ν΄ λ°μ΄ν°λ₯Ό νννλ λ°©μ. μ»΄ν¨ν°λ 2μ§μλ₯Ό κΈ°λ°μΌλ‘ λ°μ΄ν°λ₯Ό νννκ³ μ°μ° μ§ν
→ μ΄μ μ μ¬νκ² 10μ§μλ 10κ°μ κΈ°νΈ / 16μ§μλ 16κ°μ κΈ°νΈ(1λΆν° 10κΉμ§μ μ«μ + A ~ F λμλ¬Έμ κ΅¬λΆ x)λ₯Ό μ¬μ©
ex) μ¦ 10μ§μλ‘ 10μ 16μ§μλ‘ Aλ‘ νννκ³ / 10μ§μλ‘ 17μ 16μ§μλ‘ 11λ‘ νννλ€
Q. 16μ§μκ° νμν μ΄μ ?
→ 2μ§μλ‘λ§ νννλ©΄ λ°μ΄ν°μ κΈΈμ΄κ° κΈΈμ΄μ§λ―λ‘ νλμ νμ νκΈ° μ΄λ €μ. λ°λΌμ 2μ§μ λ€ κ°λ 16μ§μ 1κ°λ‘ κ°κ²°ν νν κ°λ₯νλ―λ‘ 16μ§μλ₯Ό λ§μ΄ μ¬μ©
β‘ λ°μ΄ν°μ νν λ¨μ - bitμ byte
→ λΉνΈ(bit)λ μ»΄ν¨ν°κ° νννλ λ°μ΄ν°μ μ΅μλ¨μ(λ©λͺ¨λ¦¬μ μ΅μλ¨μ)λ‘μ 2μ§μ κ° νλλ₯Ό μ μ₯ν μ μλ λ©λͺ¨λ¦¬μ ν¬κΈ°
→ λ°μ΄νΈ(byte)λ λΉνΈλ₯Ό 8κ° λͺ¨μ κ²
ex) μ¦ 1bitλ‘ ννν μ μλ λ°μ΄ν°μ μλ 2κ° / 2bitλ‘ ννν μ μλ λ°μ΄ν°μ μλ 4κ° / 1byteλ‘ ννν μ μλ λ°μ΄ν°μ μλ $2^8$κ°
λ°λΌμ nκ°μ bitλ‘ ννν μ μλ λ°μ΄ν°μ μλ $2^n$κ°
β’ 8μ§μμ 16μ§μμ λ°μ΄ν° νν
→ 0xλ‘ μμνλ©΄ 16μ§μμ νν / 0μΌλ‘ μμνλ©΄ 8μ§μμ νν
ex) μλμ μ½λ μμλ₯Ό 보면 ννλ°©λ²λ§ λ€λ₯Ό λΏ μ»΄ν¨ν°λ λ΄λΆμ μΌλ‘ 2μ§μμ ννλ‘ λμΌν κ°μ μ μ₯νλ€
(%dλ‘ λνλ΄μκΈ°μ 10μ§μ ννλ‘ λνλΈ κ²μ΄λ€)
#include <stdio.h>
int main(void) {
int num1 = 10;
int num2 = 0xA;
int num3 = 012;
printf("%d, %d, %d\n", num1, num2, num3);
return 0;
}
β£ μ μμ μ€μμ νν λ°©μ
→ μ μμ ννλ°©μ
: λ§μ½ 1λ°μ΄νΈμ λ©λͺ¨λ¦¬ 곡κ°μ μ μλ₯Ό μ μ₯νλ € νλ€λ©΄ κ°μ₯ μΌμͺ½μ μ‘΄μ¬νλ bitλ λΆνΈ ννμ μ¬μ©. μμλΌλ©΄ 1, μμλΌλ©΄ 0μ μ μ₯νλ€. μ΄ bitλ₯Ό κ°λ¦¬μΌ MSB(Most Significant Bit)λΌκ³ νλ€. κ·Έλ¦¬κ³ κ°μ₯ μΌμͺ½ bitλ₯Ό μ μΈν λλ¨Έμ§ bitλ λ°μ΄ν°μ ν¬κΈ°λ₯Ό λνλΈλ€.
ex) 10μ§μλ‘ 10μ΄λΌλ μμ μ μλ₯Ό νννκ³ μΆλ€λ©΄ μλμ κ°μ΄ 000001010μΌλ‘ ννν μ μλ€.
: μμ μ μλ₯Ό νννκ³ μΆλ€λ©΄ 2μ 보μλ₯Ό μ·¨ν΄μΌ νλ€. μλμ μΈ μ°¨λ‘ κ³Όμ μ '2μ 보μλ²'μ΄λΌ λΆλ¦
(1) λ¨Όμ μμ μ μλ₯Ό νννλ€
(2) 1μ 보μλ₯Ό μ·¨νλ€
(3) 1μ λνλ€
ex) μ μ -5λ₯Ό νννκ³ μΆλ€λ©΄ μ μ +5μΈ 00000101μμ 1μ 보μλ₯Ό μ·¨ν 11111010λ‘ λμ¨ λ€μ, 1μ λν κ²°κ³ΌμΈ 11111011μ΄ μ λ΅
ex) μμ μ μ 10101001κ³Ό 11110000μ κ°κ° 10μ§μλ‘ -87κ³Ό -16μ΄ λλ€. (μ 2μ 보μλ²μ κ±°κΎΈλ‘ λ°λ₯΄λ©΄ λλ€)
: μ¦ μμμμ μμλ‘ λ°κΏ λ 1μ 0μΌλ‘ λ°κΎΈκ³ , 0μ 1λ‘ λ°κΎΌ λ€μ + 1 / μμμμ μμλ‘ λ°κΏ λλ λ°λλ‘ -1μ νλ€μ 1μ 0μΌλ‘ λ°κΎΈκ³ 0μ 1λ‘ λ°κΎΌλ€. μ΄ λ μμλ‘ λ¨Όμ 1μ 0μΌλ‘ λ°κΎΈκ³ , 0μ 1λ‘ λ°κΎΌ λ€μ +1 ν΄λ κ°λ₯νλ€! (μλ μμ μ°Έμ‘°)
→ μ€μμ ννλ°©μ
: μ°λ¦¬κ° νννκ³ μ νλ μ€μμ κ°μ μ νν ννν μ μμΌλ―λ‘, μ΄λ¬ν μ€μ°¨λ₯Ό 'λΆλ μμμ μ€μ°¨'λΌκ³ νλ€. λΆνΈ λΉνΈ(sign bit), μ§μ λΉνΈ(exponent bit)κ° e, κ°μλΉνΈ(fraction, significant, mantissa bit)κ° mμ λ»νλ€.
β€ λΉνΈ μ°μ°μ
→ μ£Όλ‘ νλμ¨μ΄ κ΄λ ¨ νλ‘κ·Έλλ°μ νμ©λμ§λ§, λ©λͺ¨λ¦¬ 곡κ°μ ν¨μ¨μ± λμ΄κ±°λ μ°μ°μ μλ₯Ό μ€μΌ λ λ§μ΄ μ¬μ©λκΈ°λ νλ€.
μ°μ°μ | μ°μ°μ κΈ°λ₯ |
& | AND μ°μ° |
| | OR μ°μ° |
^ | XOR μ°μ°(λ κ°μ bitκ° λ€λ₯΄λ©΄ 1 λ°ν) |
~ | νΌμ°μ°μμ λͺ¨λ λΉνΈ λ°μ |
<< | νΌμ°μ°μμ λΉνΈ μ΄μ μΌμͺ½μΌλ‘ μ΄λ |
>> | νΌμ°μ°μμ λΉνΈ μ΄μ μ€λ₯Έμͺ½μΌλ‘ μ΄λ |
→ ~ NOT μ°μ°μλ₯Ό μ¬μ©ν λ 맨 μμ MSBλ λ°μ λμ΄ λΆνΈλ§μ λ°λμ μ£Όμ!
→ <<λ λΉνΈλ₯Ό μΌμͺ½μΌλ‘ μ΄λ: μΌμͺ½μΌλ‘ μ΄λνλ©° μκΈ°λ μ€λ₯Έμͺ½ λΉμΉΈμ 0μΌλ‘ μ±μμ§κ³ λ°λ €λλ μΌμͺ½ λΉνΈλ€μ κ·Έλ₯ λ²λ €μ§λ€. κ·Έλ¦¬κ³ μΌμͺ½μΌλ‘ 1μΉΈμ© μ΄λν λλ§λ€ μ μμ κ°μ λ λ°°κ° λλ€. λ°λΌμ μν©μ λ°λΌ κ³±μ λλμ μ°μ°μ λΉνΈμ μ΄λμ°μ°μΌλ‘ λ체λλ©° μ±λ₯ ν₯μ. CPU μ μ₯μμλ κ³±μ κ³Ό λλμ μ΄ λΉνΈμ μ΄λλ³΄λ€ λΆλ΄μ€λ½κΈ° λλ¬Έ.
→ >>λ λΉνΈλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λ: μ€λ₯Έμͺ½μΌλ‘ 1μΉΈμ© μ΄λν λλ§λ€ μ μλ 2λ‘ λλμ΄μ§λ€. κ·Έλ¬λ μμλΌλ©΄ μ€λ₯Έμͺ½μΌλ‘ μ΄λν λ λΆνΈ bitλ₯Ό 1λ‘ μ μ§νλ CPUκ° μκ³ , μλ CPUκ° μ‘΄μ¬.
* μμ )
#include <stdio.h>
int main(void) {
int num1 = 15;
int num2 = 20;
int num3 = num1 & num2;
int num4 = -16;
printf("num1 AND num2: %d\n", num3); //00000100 = 4
printf("num1 OR num2: %d\n", num1|num2); //00011111 = 31
printf("num1 XOR num2: %d\n", num1^num2); //00011011 = 27
printf("~ num2: %d\n", ~num2); //-21 (after +1 -> -21)
printf("after moving 1 bit(right-wise): %d\n", num4>>1);
return 0;
}
* μ λ ₯λ°μ μ μ κ°μ λΆνΈλ₯Ό λ°κΏ μΆλ ₯νλ νλ‘κ·Έλ¨
#include <stdio.h>
int main(void) {
int num;
printf("enter your num: ");
scanf("%d",&num);
num = ~ num;
num += 1;
printf("the result is: %d\n", num);
return 0;
}
* μ£Όμ΄μ§ xμ yμμ shift operatorλ§μ νμ©νμ¬ 1, 2, 3, 4, 5, 6μ λͺ¨λ μΆλ ₯νκΈ° (>>μ κ²°κ³Ό 2λ‘ λλ λͺ«μ΄ λμ¨λ€)
#include <stdio.h>
int main(void) {
int x = 7, y = 10;
printf("%d\n",y>>3); //1
printf("%d\n",(y>>3)<<1); //2
printf("%d\n",x>>1); //3
printf("%d\n",(y>>3)<<2); //4
printf("%d\n",y>>1); //5
printf("%d\n",(x>>1)<<1); //6
return 0;
}
5. μμμ κΈ°λ³Έ μλ£ν
β₯ μλ£νμ λ°μ΄ν°λ₯Ό νννλ λ°©λ²
→ λ³μλ₯Ό λ§λ€κΈ° μν΄ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν λ (1) μ μ μ μ₯μΈμ§ / μ€μ μ μ₯μΈμ§ νμΈ + (2) μ μ₯νκΈ° μν΄ λͺ λ°μ΄νΈλ₯Ό μ¬μ©ν κ²μΈμ§
→ κΈ°λ³Έ μλ£νμ μ’ λ₯μ λ°μ΄ν°μ ννλ²μ(VC++ compiler κΈ°μ€)
μλ£ν | ν¬κΈ° | κ°μ ννλ²μ |
char (μ μν) | 1 byte | -128 ~ +127 |
short (μ μν) | 2 byte | -32768 ~ +32767 |
int (μ μν) | 4 byte | -2147483648 ~ + 2147483647 |
long (μ μν) | 4 byte / 8 byte | -2147483648 ~ + 2147483647 |
long long (μ μν) | 8 byte | - 9223372036854775808 ~ + 9223372036854775807 |
float (μ€μν) | 4 byte | ~ |
double (μ€μν) | 8 byte | ~ |
long double (μ€μν) | more than 8 bytes | double μ΄μμ νν λ²μ |
→ ννμ μ¬μ©λλ λ°μ΄νΈμ ν¬κΈ°κ° ν΄μλ‘ ννν μ μλ κ°μ λ²μκ° λμ΄μ§λ€.
→ μλ£ν λ³λ‘ ν¬κΈ°λ₯Ό μ νν μ ννκ³ μμ§λ μλ€. compilerλ³λ‘ μ½κ° λ€λ₯΄λ€.
→ λ°μ΄ν° νν λ°©μμ΄ λ€λ₯΄λ―λ‘ μ΅μ 2 κ° μ΄μμ μλ£νμ λ§λ€μ΄μΌ νκ³ (μ μν / μ€μν), λ©λͺ¨λ¦¬μ μ μ ν μ¬μ©μ μν΄ λ€μν ν¬κΈ°μ μλ£ν νμ
β¦ μ°μ°μ sizeof(ν¨μ x)
→ μμ μ΄ μ¬μ©νλ compilerμ μλ£νλ³ byte ν¬κΈ° νμΈ κ°λ₯ - λ©λͺ¨λ¦¬ 곡κ°μμ μλͺ¨νλ λ©λͺ¨λ¦¬μ ν¬κΈ°λ₯Ό μ μ μμ
#include <stdio.h>
int main(void) {
int num = 10;
int sz1 = sizeof(num);
int sz2 = sizeof(int);
printf("size of int type: %d\n", sz2);
printf("size of num variable: %d\n", sz1);
return 0;
}
/*
size of int type: 4
size of num variable: 4
*/
β§ μ μλ₯Ό νν λ° μ²λ¦¬νκΈ° μν μΌλ°μ μΈ μλ£νμ μ ν
→ κ°μ λ²μλ§ κ°μ§κ³ μ΄λ€ μλ£νμΌλ‘ ννν μ μμ μ§λ λͺ¨λ₯Έλ€. μΌλ°μ μΌλ‘ CPUκ° μ²λ¦¬νκΈ°μ κ°μ₯ μ ν©ν ν¬κΈ°μ μ μ μλ£νμ intλ‘ μ μ. intν μ°μ°μ μλκ° λ€λ₯Έ μλ£νμ μ°μ°μλμ λΉν΄ λμΌνκ±°λ λ λΉ λ₯΄λ€. λ°λΌμ intλ³΄λ€ μμ ν¬κΈ°μ λ°μ΄ν°λ intν λ°μ΄ν°λ‘ λ°κΏμ(ν λ³ν) μ°μ°μ΄ μ§νλλ€.
ex) μλ μμ νμΈ
#include <stdio.h>
int main(void){
short num1 = 300, num2 = 200;
char num3 = 4, num4 = 5;
printf("size of num1 and num2: %d, %d\n",sizeof(num1), sizeof(num2));
printf("size of num3 and num4: %d, %d\n",sizeof(num3), sizeof(num4));
printf("size of char add: %d\n", sizeof(num1+num2));
printf("size of short add: %d\n", sizeof(num3+num4));
}
/*
size of num1 and num2: 2, 2
size of num3 and num4: 1, 1
size of char add: 4
size of short add: 4
*/
→ κ·Έλ¬λ intνλ³΄λ€ λ²μκ° μμ short, char νμ λ°μ΄ν°μ μμ΄ λ§μμ μ°μ°μλ보λ€λ λΉμ₯μ λ°μ΄ν° ν¬κΈ°λ₯Ό μ€μ΄λ κ²μ΄ λ μ€μν κ²½μ° λ§μ΄ μ¬μ©λλ€. μ¦, ν¬κΈ°μ λ―Όκ°ν λ°μ΄ν°λ₯Ό μ¬μ©ν λ
β¨ μ€μλ₯Ό νν λ° μ²λ¦¬νκΈ° μν μΌλ°μ μΈ μλ£νμ μ ν
→ μ€μ μλ£νμ μμ΄μ κ°μ₯ μ€μν μμλ μ λ°λμ΄λ€. μ λ°λλ, 'μ€μ°¨κ° λ°μνμ§ μλ μμμ μ΄νμ μλ¦Ώμ' , μ¦ λͺ μ리κΉμ§λ μ€μ°¨κ° λ°μνμ§ μμμ 보μ₯νλ λ²μμ΄λ€.
μ€μ μλ£ν | μμμ μ΄ν μ λ°λ | λ°μ΄νΈ μ |
float | 6μ리 | 4 |
double | 15μ리 | 8 |
long double | 18μ리 | 12 |
→ doubleμ΄ λ³΄νΈμ μΌλ‘ μ¬μ©λλ€. floatλ³΄λ€ μ λ°λκ° λμΌλ©΄μλ long double보λ€λ λΆλ΄μ΄ λ λκΈ° λλ¬Έ
* μμ ) μμ λ°μ§λ¦μ μ λ ₯ λ°μμ μμ λμ΄λ₯Ό μΆλ ₯νλ λ¬Έμ
#include <stdio.h>
int main(void) {
double rad, area;
printf("enter radius: ");
scanf("%lf",&rad);
area = rad * rad * 3.1415;
printf("area of the circle is: %f\n", area);
return 0;
}
/*
enter radius: 2.2
area of the circle is: 15.204860
*/
β© unsigned
→ μ μ μλ£νμ νν΄μ, μμ unsigned μ μΈμ μΆκ°νλ©΄ 0 μ΄μμ κ°λ§ νννλ μλ£νμ΄ λλ€. λ°λΌμ μ μλ‘ ννν μ μλ κ°μ λ²μκ° μμ μ μ λ°©ν₯μΌλ‘ 2λ°° λμ΄μ§κ² λλ€. μλ₯Ό λ€μ΄ charνμ -128 ~ +127κΉμ§ ννμ΄ κ°λ₯νλλ°, unsigned charκ° λλ©΄ ννν μ μλ κ°μ λ²μκ° 0μ΄μ +255κ° λλ€.
→ unsigned κ°μ λΆμ΄λ©΄ 맨 μμ MSBκ° κ°μ ν¬κΈ°λ₯Ό λνλΌ μ μλ bitλ‘ μ¬μ©νκ² λλ©΄μ ννν μ μλ κ°μ΄ 0 μ΄μμ λ²μλ‘ λ λ°°κ° λλ€. (μ¦ defaultλ signedμ΄λ©° signet intλ intλ λμΌ)
βͺ ASCII μ½λ
→ λ¬Έμλ₯Ό νννλ €λ©΄ μ«μμ λ¬Έμλ₯Ό mappingν΄μ£Όμ΄μΌ νλ€. λ¬Έμλ₯Ό νννκΈ° μν΄μλ μμ λ°μ΄ν, printf()λ‘ μΆλ ₯νκΈ° μν΄μλ conversion specifierλ‘ %c μ¬μ©. λ¬Έμλ₯Ό μ μ₯ν λλ char ν μ¬μ©
→ λ¬Έμλ μ μλ‘λ μΆλ ₯μ΄ κ°λ₯νκ³ , μ΄ λ mappingν ASCII νμ€μ λ°λΌ(μλ₯Ό λ€μ΄ Aλ 65λ²) %cμΈμ§, %dμΈμ§μ λ°λΌ μΆλ ₯λλ€.
#include <stdio.h>
int main(void) {
char ch1 = 'A';
int ch2 = 90;
printf("%c %d\n", ch1, ch1);
printf("%c %d\n", ch2, ch2);
return 0;
}
/*
A 65
Z 90
*/
* μ°Έκ³ ) ASCII ν
β« μμ
* μμλ 'λ³κ²½μ΄ λΆκ°λ₯ν λ°μ΄ν°'
<1> μ΄λ¦μ΄ μλ μμ (literal μμ / literal)
ex) int num = 30 + 40;
→ λ¨Όμ 첫λ²μ§Έλ‘ μ μ 30κ³Ό 40μ΄ λ©λͺ¨λ¦¬ 곡κ°μ μμμ ννλ‘ μ μ₯λλ€. κ·Έ λ€μ λ μμλ₯Ό κΈ°λ°μΌλ‘ λ§μ μ΄ μ§νλκ³ , λ§μ μ κ²°κ³Όλ‘ μ»μ΄μ§ μ μ 70μ΄ λ³μ numμ μ μ₯λλ€.
→ μ¦, 30κ³Ό 40μ μλ‘ μ°μ°νκΈ° μν΄μλ μΌλ¨μ λ©λͺ¨λ¦¬μ μ¬λ €μΌ CPUκ° μ°μ°μ μ§ννλ€. μ΄ λ λ³μλ₯Ό λ°λ‘ λ§λ€μ§ μμκΈ° λλ¬Έμ λ³μμ μ΄λ¦μ΄ μλ μμκ° λμ΄μ λ©λͺ¨λ¦¬μ μ¬λΌκ°κ² λλ€.
#include <stdio.h>
int main(void) {
int num1 = 3 + 4;
int num2 = 7 + num1;
double num3 = 2.12 + 7.49;
return 0;
}
: λ°λΌμ μ μ½λμμ μμμ κ°μλ 5κ°κ° λλ€.
→ sizeof()λ₯Ό μ΄μ©ν΄μ literal constantμ ν¬κΈ°λ₯Ό νμΈν μ μλ€.
#include <stdio.h>
int main(void) {
printf("%d\n",sizeof('A')); //4
printf("%d\n",sizeof(7)); //4
printf("%d\n",sizeof(7.14)); //8
return 0;
}
: λ¬Έμ 'A'λ 65λ‘ λ°λμ΄μ 4λ°μ΄νΈ ν¬κΈ°μ intνμΌλ‘ ννλ¨μ μ μ μλ€.
→ κΈ°λ³Έμ μΌλ‘ intν / doubleνμΌλ‘ κ°κ° μ μμ μ€μ μ°μ°μ μ§ννλ―λ‘ λ§μ½ floatλΌκ³ λͺ μν΄μ μλμ κ°μ΄ μ½λλ₯Ό μμ±νλ€λ©΄,
#include <stdio.h>
int main(void) {
float num1 = 5.789;
float num2 = 3.24 + 5.12;
return 0;
}
: κΈ°λ³Έμ μΈ double ννμ μ€μλ₯Ό floatν λ³μμ μ μ₯νλ―λ‘ λ°μ΄ν°κ° μλ €λκ° μ μλ κ²½κ³ λ©μμ§κ° λ¬λ€. λ°λΌμ μλμ μΌλ‘ doubleν μμκ° λλ μμλ₯Ό floatν μμλ‘ λ°κΎΈλ €λ©΄ μμμ λ€μ f(F)λ₯Ό λΆμ¬ μ£Όλ©΄ λλ€.
→ μ΄μ κ°μ΄ μμκ° λ€μν μλ£νμ ννν μ μλλ‘ λ€μ λ€μν μ λ―Έμ¬λ₯Ό λΆμ΄κ² ν μ μλ€.
μ λ―Έμ¬ | μλ£ν | μ¬μ©μ μ |
U | unsigned int | unsigned int n = 1025U |
L | long | long n = 2467L |
UL | unsigned long | unsigned long n = 3456UL |
LL | long long | long long n = 5768LL |
ULL | unsigned long long | unsigned long long n = 8979ULL |
F | float | float f = 3.15F |
L | long double | long double f = 5.789L |
<2> μ΄λ¦μ μ§λλ μ¬λ³Όλ¦ μμ (symbolic μμ / const)
→ const ν€μλλ₯Ό μ΄μ©ν΄μ μμλ₯Ό λ§λ€ μ μλ€(맀ν¬λ‘ μ΄μ©μ λμ€μ!)
→ μμμ΄κΈ° λλ¬Έμ μ μΈκ³Ό λμμ μ΄κΈ°ν νμ
β» λ³μμ λ€λ₯΄κ² μμλ κ°μ λ³κ²½μ΄ λΆκ°λ₯νλ€. μμμ μ΄λ¦μ λͺ¨λ λλ¬Έμ / λ μ΄μμ λ¨μ΄λ‘ μ°κ²°ν λλ μΈλλ° μ΄μ©ν΄μ λ¨μ΄ ꡬλΆ
ex) μλ μμ νμΈ
#include <stdio.h>
int main(void) {
double r;
const double PI = 3.141592;
double area;
printf("enter the radius: ");
scanf("%lf",&r);
area = PI * r * r;
printf("area is %.2f\n", area);
return 0;
}
β¬ μλ£νμ λ³ν
<1> μλ ν λ³ν
→ λμ μ°μ°μμ μΌνΈκ³Ό μ€λ₯ΈνΈ κ°κ°μ λ νΌμ°μ°μμ μλ£νμ΄ μΌμΉνμ§ μμΌλ©΄, μΌνΈμ μλ νΌμ°μ°μλ₯Ό λμμΌλ‘ ν λ³νμ΄ μλμΌλ‘ μΌμ΄λλ€. (μ μ₯μμ μλ£νμ μ°μ μμκ° λ λκΈ° λλ¬Έ)
ex) double num1 = 245; (intν μ μλ₯Ό doubleνμΌλ‘ μλ ν λ³ν: 245κ° 245.0μΌλ‘ λ³νλμ΄ num1μ μ μ₯)
ex) int num2 = 3.1415; (doubleν μ€μλ₯Ό intνμΌλ‘ μλ ν λ³ν: 3.1415κ° 3μΌλ‘ λ³νλμ΄ num2μ μ μ₯)
→ μ΄λ κ² μ€μν λ°μ΄ν°λ₯Ό μ μν λ°μ΄ν°λ‘ λ³ννλ κ³Όμ μμλ 'μμλΆμ μμ€'μ΄ λ°μνλ€.
→ λ°μ΄νΈ ν¬κΈ°μ ν¬κΈ°κ° ν° μ μλ₯Ό ν¬κΈ°κ° μμ μ μλ‘ ν λ³νμ μ§ννλ κ²½μ° μμ λ°μ΄νΈκ° λ¨μν μλ©Έλλ€. μμ λ°μ΄νΈμ μμ€λ‘ λΆνΈκ° λ°λ μλ μλ€. λ°λλ‘ λ°μ΄νΈ ν¬κΈ°κ° μμ μ μλ₯Ό ν° μ μλ‘ λ³νμ ν λλ λ°μ΄ν°μ μμ€μ΄ λ°μνμ§λ μλλ€.
ex)
#include <stdio.h>
int main(void) {
int num3 = 129;
char ch = num3;
printf("%d\n", ch); //-127 10000001
return 0;
}
: 129λ₯Ό intν μλ£ν λ³μμ λ£μλλ° charνμΌλ‘ μλ£νμ λ°κΎΈλ -127λ‘ λμλ€.
→ μ μμ μΉκ²©(Integral Promotion)
: CPUκ° μ²λ¦¬νκΈ°μ κ°μ₯ μ ν©ν ν¬κΈ°μ μ μ μλ£νμ intλ‘ μ μν΄μ, intν μ°μ°μ μλκ° λ€λ₯Έ μλ£νμ μ°μ°μλμ λΉν΄μ λμΌνκ±°λ λ λΉ λ₯΄λ€.
ex) short num1 = 15, num2 = 25; short num3 = num1 + num2;
: μ μ½λμμλ num1+num2 μ°μ° κ³Όμ μ intνμΌλ‘μ μλ ν λ³νμ΄ λ°μνκ³ λ€μ shortνμΌλ‘ ν λ³νμ΄ μΌμ΄λλ€. λ°λΌμ, short → int → shortλ‘ λ μ°¨λ‘μ μλ ν λ³ν λ°μ
→ νΌμ°μ°μμ μλ£ν λΆμΌμΉ
: λ°μ΄ν°μ μμ€μ μ΅μννλ λ°©ν₯μΌλ‘ μ§ννλ€. μλ₯Ό λ€μ΄μ intν μ μμ longν μ μλ₯Ό λμμΌλ‘ λ§μ μ°μ°μ μ§ννλ€λ©΄ νμ΄ν λ°©ν₯μ λ°λΌμ intν μ μκ° longν μ μλ‘ μλ ν λ³νλλ€. λ§μ½ charν μ μμ shortν μ μλ₯Ό λμμΌλ‘ μ°μ°μ μ§ννλ€λ©΄ 무쑰건 μ μμ μΉκ²©μ μν΄μ intν μ μλ‘ ν λ³νλλ€. μ€μ μλ£νμ΄ λ°μ΄ν° μμ€μ μ΅μννλ―λ‘ 4λ°μ΄νΈ ν¬κΈ°μ floatμ΄ 8λ°μ΄νΈ ν¬κΈ°μ long longλ³΄λ€ ν λ³ν μ°μ μμκ° λλ€.
<2> λͺ μμ ν λ³ν: κ°μ λ‘ μΌμΌν€λ ν λ³ν
→ ν λ³ν μ°μ°μ(type casting operator)λ₯Ό μ΄μ©ν΄μ κ°μ λ‘ ν λ³νμ λͺ λ Ήνλ€.
ex)
#include <stdio.h>
int main(void) {
int num1 = 3, num2 = 4;
double res;
res = num1 / num2;
printf("result is: %f\n", res);
return 0;
}
//result is: 0.000000
: intν μ μλ₯Ό λμμΌλ‘ λλμ μ μ§νν΄μ λλμ κ²°κ³Όλ 0μ΄ λλ€. κ·Έλ¦¬κ³ doubleλ‘ μλ ν λ³νλμ΄ μΆλ ₯νλ©΄ 0.000000μ΄ λμ¨λ€.
→ λ°λΌμ, λ³μ ν κ³³μ (double)μ λΆμ΄λ©΄ μ°μ μ°μ°μ ν λ³ν κ·μΉμ μν΄ num2μ μ μ₯λ κ°λ μλμΌλ‘ doubleλ‘ μλ ν λ³ν. λ°λΌμ κ²°κ³Όλ‘ 0.75κ° λμ¨λ€. (μλ ν λ³νμ΄ λ°μνλ κ²½μ°λ ν λ³νμ λͺ μν΄μ£Όλ κ²μ΄ μ’λ€. μ½λμ λΆμμ λλ ν¨κ³Ό)
#include <stdio.h>
int main(void) {
int num1 = 3, num2 = 4;
double res;
res = (double)num1 / num2;
printf("result is: %f\n", res);
return 0;
}//result is: 0.750000
* λ΄μ© μ 체 μΆμ² <μ€μ±μ°μ μ΄ν C νλ‘κ·Έλλ°>
* μ¬μ§ μΌλΆ μΆμ² https://donghwada.tistory.com/44
'C, C++ > Fundamentals' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
C Basics 5/ (μ΄ν νλ‘κ·Έλλ°) (0) | 2023.07.26 |
---|---|
C Basics 4/ (μ΄ν νλ‘κ·Έλλ°) (0) | 2023.07.05 |
C Basics 3/ (μ΄ν Cνλ‘κ·Έλλ°) (0) | 2023.06.27 |
C Basics 1/ (0) | 2023.06.25 |
C fundamentals (1) (1) | 2023.06.16 |
λκΈ