1
2
3
4
| struct register {
int reg1 : 1;
unsinged int reg2 : 1;
}; |
[코드 테스트]
reg1에 1을 대입하면 -1이 나온다.
reg2에 1을 대입하면 1이 나온다.
[이유]
비트 1개로는 두 개의 수를 표현하는데,
signed는 -부분도 있으니 0, –1
unsinged는 0,1로 표현.
음~ 기본이 중요하다. :)
채종권 팁 & 테크
대학원 프로젝트 진행하다가 메모해둔 코드인데 이것도 3년전 다이어리를 보다가 발견.. RTCP 패킷에 들어가는 64bit의 NTP Timestamp를 구할때 사용하는 함수다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include "compat/gettimeofday.h"
#include "ntp.h"
#define SECS_BETWEEN_1900_1970 2208988800u
void ntp64_time(uint32_t *ntp_sec, uint32_t *ntp_frac)
{
struct timeval now;
uint32_t tmp;
/* now.tv_usec is signed on many platforms; compensate */
gettimeofday(&now, NULL);
/* NB ntp_frac is in units of 1 / (2^32 - 1) secs. */
*ntp_sec = now.tv_sec + SECS_BETWEEN_1900_1970;
tmp = now.tv_usec;
*ntp_frac = (tmp << 12) + (tmp << 8) - ((tmp * 3650) >> 6);
} |
채종권 팁 & 테크
5년 전 다이어리를 뒤지다 찾아낸 코드 :)
대학4학년 때 Strategy Pattern을 배우면서 Quiz 수준의 코딩 과제를 수행한 것. 지금 보니 재밌네~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
| using System;
using System;
namespace Sorting
{
/// <summary>
/// Strategy Paticipant 정의
/// </summary>
public abstract class SortAlgorithm
{
/// <summary>
/// 모든 알고리즘에 적용되는 공통 인터페이스 정의
/// </summary>
/// <param name="size">정렬될 데이터의 사이즈</param>
/// <param name="data">정렬될 배열</param>
public abstract void Sort(int size, int[] data);
protected void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
/// <summary>
/// 버블 소트 알고리즘
/// 개념 : 바로 옆의 수와 비교하면서 작은값을 왼쪽으로 버블시켜줌
/// </summary>
public class BubbleSort : SortAlgorithm
{
public override void Sort(int size, int[] data)
{
for (int i = 0; i < size; i++) {
for (int j = size - 1; j > i; j--) {
if (data[j-1] > data[j])
swap(data, j-1, j);
}
}
}
}
/// <summary>
/// 퀵소트 알고리즘
/// 개념 : 피벗보다 작은수와 큰수로 데이터 집합을 나눈후 재귀호출
/// </summary>
public class QuickSort : SortAlgorithm {
public override void Sort(int size, int[] data) {
quicksort(data, 0, size-1);
}
private void quicksort(int[] data, int left, int right) {
int pivot, i, j;
if (left < right) {
i = left;
j = right+1;
pivot = data[left];
do {
do
i++;
while (data[i] < pivot);
do
j--;
while (data[j] > pivot);
if (i < j)
swap(data, i, j);
} while (i < j);
swap(data, left, j);
quicksort(data, left, j-1);
quicksort(data, j+1, right);
}
}
}
/// <summary>
/// 셀렉션 소트 알고리즘
/// 개념 : 매번 최소값을 찾아 차례대로 넣어줌
/// </summary>
public class SelectionSort : SortAlgorithm
{
public override void Sort(int size, int[] data)
{
for (int i = 0; i < size-1; i++) {
int min = i;
for (int j = i+1; j < size; j++)
if (data[j] < data[min])
min = j;
swap(data, i, min);
}
}
}
} |
채종권 팁 & 테크 알고리즘
개발중인 스트리밍 클라이언트의 기능을 테스트 하기 위한 목적으로
Darwin 스트리밍 서버를 설치해보았다.
아래 링크로 가보면 스크립트가 있는데 그것만 실행시키면 우분투에서 설치가 완료된다.
설치 방법: Darwin Streaming Server 설치
채종권 팁 & 테크 스트리밍