레이블이 KYS_Algorithm인 게시물을 표시합니다. 모든 게시물 표시
레이블이 KYS_Algorithm인 게시물을 표시합니다. 모든 게시물 표시

2016년 4월 3일 일요일

Bit Calculation Marco


  • Source

#pragma once

// 한 비트 클리어
#define clear_bit(data, loc) ( (data) &= ~( 0x1<<(loc) ) )
// 연속된 여러 비트 클리어
#define clear_bits(data, area, loc) ( (data) &= ~( (area)<<(loc) ) )

// 한 비트 설정
#define set_bit(data, loc) ( (data) |= 0x1<<(loc) )

// 연속된 여러 비트 설정
#define set_bits(data, area, loc) ( (data) |= (area)<<(loc) )

// 한 비트 반전
#define invert_bit(data, loc) ( (data) ^= (0x1<<(loc)) )

// 연속된 여러 비트 반전
#define invert_bits(data, area, loc) ( (data) ^= ( (area)<<(loc) ) )

// 비트 검사
#define check_bit(data, loc) ( (data) & 0x1<<(loc) )

// 비트 추출
#define extract_bits(data, area, loc) ( ( (data)>>(loc) ) & (area) )




◈ reference
 Book : 프로그래머가 몰랐던 멀티코어 CPU 이야기

2016년 2월 4일 목요일

Flowing 2 Line String

흘러가는 문자열 구현 방법

while (true)
{
if (twoRow_left_shift < Second Line Range)
twoRow_left_shift++;
else
{
if (oneRow_left_shift < First Line Range)
oneRow_left_shift++;
else
curPos++;
}

if (twoRow_left_shift == Second Line Range && oneRow_left_shift == First Line Range)
{
for (i = 0; i < oneRow_left_shift; i++)
printf("%c", (buf[(i + curPos) % String Length]));

puts("");

for (j = 0; j < twoRow_left_shift; j++)
printf("%c", (buf[(i + j + curPos) % String Length]));

puts("");

if (curPos % len == 0)
curPos = 0;
}
}

- 빨간색은 사용자가 상황에 따라 정의해줘야 할 값들


Example Source

2016년 1월 15일 금요일

Array Access for near 8-way index


배열을 사용할 때, 근접한 8개의 인덱스 값들을 검사하는 방법

for (int y = -1; y <= 1; ++y)
{
for (int x = -1; x <= 1; ++x)
{
if ((x | y) && Addition Condition)
array[targetX + x][targetY + y] = value;
}
}
}

- 빨간색은 사용자가 상황에 따라 정의해줘야 할 값들