'bit'에 해당되는 글 3건

Programming/.NET

비트 단위의 논리 연산을 수행합니다.

 

int i = 10;

int bit_and = i & 3;
int bit_or = i | 3;
int bit_xor = i ^ 3;
int bit_not = ~i;

Console.WriteLine("Result : {0} | {1}", bit_xor, bit_not);

 

& 는 and 연산으로서 같은 값인것만 1로 처리합니다. 그래서 10의 값이 1010과 3의 값인 0011을 연산하면

 

1010
0011
----
0010

 

이 되어 결과는 3이 됩니다.

 

| 는 or 연산입니다. 따라서 둘중 어느 하나라도 1이 있으면 결과는 1이 됩니다.

 

1010
0011
----
1011

 

^ 는 Xor 연산으로 둘의 값이 1이든 0이든 서로 틀려야만 1이 됩니다.

 

1010
0011
----
1001

 

마지막으로 ~는 보수입니다. 피연산자의 모든 값을 반대로 뒤집습니다.

 

1010
----
0101

 

다만 이 경우 부호를 나타내는 최상위 비트도 반대로 처리하기 때문에 결과는 -값이 됩니다.

'Programming > .NET' 카테고리의 다른 글

[ASP.NET MVC] Razor  (0) 2019.01.08
[ASP.NET MVC] URL 다루기  (0) 2018.12.18
[C#] 비트(bit) 연산자  (0) 2018.11.20
[ASP.NET MVC] 액션 메서드(Action Method)  (0) 2018.11.13
[C#] Thread  (0) 2018.11.06
[C#] MemoryStream / StreamWriter / StreamReader / BinaryWriter / BinaryReader  (0) 2018.10.31
0 0
Programming/C C++
1. 산술연산자

 연산자  역활
 +  더하기
 -  빼기
 *  곱하기
 /  나누기
 %  나머지

#include <stdio.h>

main()
{
  int i;
  int j;
 
  i = 3;
  j = 2;
 
  printf("%d\n", i + j);
  printf("%d\n", i - j);
  printf("%d\n", i * j);
  printf("%d\n", i / j);
  printf("%d\n", i % j);
}



2. 관계연산자

 연산자  역활
 <  작다.
 >  크다.
 ==  같다.
 <=  작거나 같다.
 >=  크거나 같다.
 !=  같지않다.

#include <stdio.h>

main()
{
  int i;
  int j;
 
  i = 3;
  j = 2;
 
  if (i < j)
    printf("i가 j보다 작다.\n");
  
  if (i > j)
    printf("i가 j보다 크다.\n");
   
  if (i == j)
    printf("i와 j가 같다.\n");
   
  if (i != j)
    printf("i와 j가 같지않다.\n");
}



3. 관계연산자의 또다른 정의 방법

관계연산자를 통해 다음과 같은 구문이 작성하였습니다.

#include <stdio.h>

main()
{
  int i = 2;
  int j = 1;
  int t;
 
  if (i < j)
    t = i + j;
  else
    t = i - j;
   
  printf("결과 : %d\n", t);
}


위 program은 i가 j보다 작으면 i와 j를 더하여 t에 저장하고 i가 j보다 작지 않으면 i에서 j를 뺀 후 그 결과를 t에 저장하도록 하고 있습니다. 만일 위와 같은 조건식이 복잡하다고 생각되면 다음과 같이 작성하는 것도 가능합니다.

#include <stdio.h>

main()
{
  int i = 2;
  int j = 1;
  int t;
 
  t = (i < j) ? i + j : i - j;
   
  printf("결과 : %d\n", t);
}


'조건 ? 참일경우의 처리 : 거짓일 경우의 처리;' 의 형식으로 작성하면 위와 같은 조건식을 조금이나마 더 간단하게 표현할 수 있게 됩니다.

4. 논리연산자

 연산자  역활
 !  부정
 &&  그리고(and)
 ||  또는(or)

#include <stdio.h>

main()
{
  int i = 10;
  int j = 20;
 
  int a = 15;
  int b = 20;
 
  if ((i < j) && (a < b))
    printf("i가 j보다 작고 a가 b보다 작다.\n");
   
  if ((i < j) || (a > b))
    printf("i가 j보다 작거나 a가 b보다 크다.\n");
   
  if (!(i == a))
    printf("i가 a와 같지 않다.(i != a)와 같다.\n");
}



5. 대입연산자

 연산자  역활
 =  우변값을 좌변에 대입
 +=  좌변값과 우변값을 더한 후 좌변에 대입
 -=  좌변값에 우변값을 뺀 후 좌변에 대입
 *=  좌변값과 우변값을 곱한 후 좌변에 대입
 /=  좌변값과 우변값을 나눈 후 좌변에 대입
 %=  좌변값과 우변값을 나누고 그 나머지를 자변에 대입
 >>=  좌변값을 우변값만큼 오른쪽 shift연산 후 좌변에 대입
 <<=  좌변값을 우변값만큼 왼족 shift연산 후 좌변에 대입
 &=  좌변값과 우변값을 and연산 후 좌변에 대입
 |=  좌변값과 우변값을 or연산 후 좌변에 대입
 ^=  좌변값과 우변값을 xor연산 후 좌변에 대입

#include <stdio.h>

main()
{
  int i = 10;
  int j = 20;
 
  i = j;
  printf("j값을 i변수에 대입 %d\n", i);
 
  i += j;
  printf("i와 j를 더하고 그 결과를 i에 대입 %d\n", i);
 
  i -= j;
  printf("i에 j값을 감산한 후 그 결과를 i에 대입 %d\n", i);
 
  i *= j;
  printf("i와 j를 곱하고 그 결과를 i에 대입 %d\n", i);
 
  i /= j;
  printf("i와 j를 나누고 그 결과를 i에 대입(정수결과값 반환) %d\n", i);
 
  i = 10;
  j = 3;
 
  i %= j;
  printf("i와 j에 대한 나머지 결과를 i에 대입 %d\n", i);
 
  i = 5;
  j = 1;
 
  i >>= j;
  printf("i값을 j만큼 오른쪽 shift한 후 i에 대입 %d\n", i);
 
  i <<= j;
  printf("i값을 j만큼 왼쪽 shift한 후 i에 대입 %d\n", i);
 
  i = 3;
  j = 2;
 
  i &= j;
  printf("i값과 j값을 and연산(bit 기준) %d\n", i);
 
  i = 2;
  j = 3;
 
  i |= j;
  printf("i값과 j값을 or연산(bit 기준) %d\n", i);
 
  i = 2;
  j = 4;
 
  i ^= j;
  printf("i값과 j값을 xor연산(bit 기준) %d\n", i);
}



6. Shift연산

인간의 입장에서 가장 많이 쓰이는 숫자는 10진수입니다. 그에 반해 Computer는 0과 1만으로 이루어진 2진수를 씁니다. 0과 1만으로 Data를 처리하기가 가장 간단하기 때문에 그 만큼 단순화할 수 있기 때문입니다. 2진수를 10진수로 이해하기 위한 방법중의 하나로 2진수 각 자리를 2의 승수로 계산하는 방법이 있습니다. 예를 들어

10

이라는 2진수가 있으면 각 자리를 오른쪽 부터 20, 21순으로 계산하여 2 * 0, 2 * 1 을 하게되면 2 * 1에만 1이 있으므로 10진수로 2가 되는 것입니다.

Shift연산이라는 것은 이 2진수로 나열된 숫자를 밀어버리거나 당겨놓는 것을 의미하는 것으로 C언어를 통해

5 >>= 1

이라고 하면 '5를 2진수화 한 기준에서 1만큼 오른쪽으로 민다.'라는 의미가 됩니다. 따라서 5를 2진수로 분해하면

101

이 되고 이 상태에서 오른쪽으로 1만큼 밀면 결과는

10

이 됩니다.

마지막으로 이 10이라는 2진수를 10진수로 바꾸면 다음과 같은 결과가 생기게 됩니다.(왼쪽 Shift연산을 하면 0이 채워지게 됩니다.)

2

Shift연산자는 필요하다면 몇개든 사용할 수 있습니다.

5 >> 4 << 3 >> 2

7. and, or, xor연산

and연산은 연산하고자 하는 피연산자의 bit가 1일때만 1이 되는 연산입니다. 참고로 and와 or, xor연산도 Shift연산처럼 2진수를 기준으로 연산합니다.

10진수 3을 2진수로 -> 11
10진수 2를 2진수로 -> 10

11과 10을 and연산하면 1이 있는 것만 1이되므로 결과는 10(10진수 2)이 됩니다.

and는 피연산자가 모두 1이여야만 결과가 1이지만 or연산자는 둘줄 하나만 1이여도 결과가 1이 됩니다.

10진수 2를 2진수로 -> 10
10진수 3을 2진수로 -> 11

10과 11을 or연산하면 둘중 하나만 1이 있어도 1이되므로 결과는 11(10진수 3)이 됩니다.

and와 or는 피연산값이 1인가 0인가에 따라 결과가 달라지지만 xor는 피연산자값이 같은가 틀린가에 따라 결과가 달라집니다.

10진수 2를 2진수로 ->  10
10진수 4를 2진수로 -> 100

10과 100을 xor연산하면 처음 두자리 까지는 상호 값이 다르므로 1이고(비어있는 부분은 자동으로 0이 됩니다.) 마지막 한자리는 둘다 값이 0이므로 연산값은 0이 됩니다. 따라서 결과는 110 (10진수 6)이 됩니다.

참고 :
산술연산자와 Shift연산자, and/or/xor연산자는 모두 뒤에 =기호가 붙어있어서 대입관련 연산자가 되지만 =기호만 빼면 각각의 역활을 별도로 수행하는 연산기호가 됩니다.(and, or, xor연산자는 모두합쳐 bit연산자라고도 합니다.)

8. sizeof 연산자

sizeof는 특정 Data형의 크기값을 반환하는 연산자중의 하나입니다.

#include <stdio.h>

main()
{
  int i;
 
  printf("int형 크기 : %d\n", sizeof(i));
}



9. cast 연산자

특정 Data형을 다른 Data형으로 변환하기 위한 연산자입니다.

#include <stdio.h>

main()
{
  int i = 10;
  
  printf("%f\n", (float)i);
}


(float)i 를 통하여 int형 변수 i를 float형으로 변환하여 출력합니다.


참고 :
Data형이 작은 것과 Data형이 큰것끼리 큰 Data형을 기준으로 연산하게 되면 자동 형변환되어 연산됩니다.

#include <stdio.h>

main()
{
  char c = 10;
  int i = 1000;
 
  printf("%d\n", c + i);
}



10. 증/가감 연산자

 연산자  역활
 ++  1더한다.
 --  1뺀다.

증/가감 연산자는 피연산자의 값을 1증가하거나 1감소시키는 역활을 합니다.

#include <stdio.h>

main()
{
  int i = 1;
 
  ++i;
 
  printf("%d\n", i);
}



하지만 ++나 --연산자가 다른 연산자와 함께 연산되는 경우 증/가감연산자가 앞에 있으면 선증가/선감소 되고 뒤에 있으면 후증가/후감소되어 약간씩 다른 결과를 나타낼 수도 있습니다.

예를 들어

int i = 100;
int j;
j = ++i - 50;

라고 하면 ++연산자가 앞에 있으므로 먼저 i값을 1증가 시킨 후 - 50을 계산하게 됩니다. 반면

int i = 100;
int j;
j = i++ - 50;

위와 같이 ++가 피연산자의 뒤에 위치하게 되면 먼저 - 50을 계산한 후에 i값을 1증가시키게 됩니다.

#include <stdio.h>

main()
{
  int i = 100;
  int j;
 
  j = ++i - 50;
  printf("%d\n", i);
  printf("%d\n", j);
 
  i = 100;
 
  j = i++ - 50;
 
  printf("%d\n", i);
  printf("%d\n", j);
}



11. bit 연산자

 연산자  역활
 &  and 연산
 |  or 연산
 ^  xor 연산
 ~  반전

bit연산자는 피연산자의 bit부호를 가지고 연산을 수행하는 연산자 입니다.

#include <stdio.h>

main()
{
 char i = 5;
 char j = 4;
 i = i & j;
 printf("%d\n", i);
}


i의 값과 j의 값을 &(and) 연산합니다.

먼저 &(and)연산은 두 bit가 1이되야만 결과가 1이 되는 연산입니다. i의 5와 j의 4라는 값을 bit로 분해해 보면 다음과 같이 되며(Char 형은 8bit크기(128)의 Data형입니다.)

i 값 5 => 00000101
j 값 4 => 00000100

bit값 중에서 같은 위치에 둘다 1인것은 뒤에서 세번째 bit밖에 없으므로 and연산의 결과는

00000100 => 정수값 4

가 되는 것입니다.


#include <stdio.h>

main()
{
 char i = 5;
 char j = 4;
 i = i | j;
 printf("%d\n", i);
}


i와 j값을 |(or) 연산합니다.

|(or)연산은 두개의 피연산자중 하나만 1이여도 결과가 1이되는 연산입니다.

5 => 00000101
4 => 00000100
-------------
결과 00000101 (5)


#include <stdio.h>

main()
{
 char i = 5;
 char j = 4;
 i = i ^ j;
 printf("%d\n", i);
}


i와 j값을 ^(xor)연산합니다.

^(xor)연산은 두 피연산자가 0이든 1이든 서로 다른 값을 가져야만 결과가 1이되는 연산입니다.

5 => 00000101
4 => 00000100
-------------
결과 00000001 (1)


#include <stdio.h>

main()
{
 char i = 128;
 
 i = ~i;
 printf("%d\n", i);
}


i값의 모든 bit를 반전시킵니다.

~연산은 피연산자의 bit를 모두 반전시키는 연산자입니다.

128 => 10000000
---------------
반전    01111111 (127)

'Programming > C C++' 카테고리의 다른 글

[C, C++] Object(obj)와 Link  (0) 2011.02.10
[C, C++] 상수(숫자, 문자, 문자열, 열거형) 정의및 사용  (0) 2011.02.09
[C, C++] 연산자  (0) 2011.02.08
[C, C++] 제어문  (0) 2011.02.01
[C, C++] 공용체  (0) 2010.09.27
[C, C++] Volatile  (0) 2010.09.15
0 0
Programming/Microsoft SQL Server
1. 숫자(정수)

 데이터형  크기  범위
 Begint  8byte  -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
 Int  4byte  -2,147,483,648 ~ -2,147,483,647
 Tinyint  2byte  0 ~ 255
 Bit  1byte  1, 0, Null
 Smallint  4byte  -32,768 ~ 32,767

2. 실수

(1) 고정형(Decimal, Numeric)
크기및 범위 : Numeric(전체크기, 소수점이하크기)

만일 Numeric(12, 2)라고 한다면 전체가 12자리이고 그 중에서 소수점이 2자리임을 의미합니다. 이때 전체크기가 1~9라면 5 byte, 10~19라면 9 byte, 20~28이라면 13 byte의 크기를 갖게 됩니다. 즉, 전체자리가 위와같이 증가한다면 크기는 4byte씩 늘어나는 것입니다.

또한 사용상 Decimal과 Numeric은 차이가 없습니다.

(2) 부동형실수(Float, Real)
크기및 범위 : Float(숫자)

Float에는 얼마만큼의 숫자가 들어가느냐에 따라 표현가능한 자리수가 달라집니다. 일반적으로 1~24까지 7자리(4 byte), 25~53까지 15자리(8 byte)표현이 가능합니다.

Real은 Float(24)와 같으며 7자리까지만 표현이 가능합니다.

Float과 Real은 상당히 큰 숫자를 다룰 수 있지만 근사치 데이터를 저장하는데, 실수를 다르는 경우 되도록 Decimal을 사용하는 것이 좋습니다.

3. 통화(통화형식은 소수점 이하 4자리수까지로 제한합니다.)

 데이터형  크기  범위
 Money  8byte  -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
 Smallmoney  4byte  -214,748.3648 ~ 214,748.3647

4. 문자(문자열)

 데이터형  크기  범위
 Char(n) / NChar(n)  입력된 n byte / 입력된 n * 2 byte  8000자 이하 / 4000자 이하
 Varchar(n) / NVarchar(n)  n에 입력된 크기와 상관없이 실제 사용된 만큼  8000자 이하 / 4000자 이하, MAX지정시 2기가 / 1,073,741,823자(단 MAX는 MS SQL 2008버전부터는 사용되지 않습니다.)
 Text / NText  231-1 byte / 230-1 byte  2,147,483,647자 / 1,073,741,823자

Text 나 NText 그리고 Image는 더이상 MS SQL Server에서 지원하지 않을 예정이니 사용하지 말고 대신 VarChar(Max), nVarChar(Max), Varbinary(Max)를 사용하는 것이 좋습니다.

Char는 고정형입니다. 예를 들어 Char(100)이라고 하면 100바이트 크기를 나타냅니다. 'abc'문자열을 저장하는 경우 3바이트만을 필요로 하지만 100중 3만 차지하고 나머지 97바이트는 버려집니다. 반면 VarChar는 가변형식으로서 VarChar(100)을 하더라도 'abc'를 저장할때는 3바이트만을 차지하기 때문에 공간효휼성은 더 좋습니다. 다만 성능은 Char형이 더 우위에 있습니다.

참고:
n으로 시작되는 형식은 유니코드문자용입니다.(대부분의 경우 크기는 n이 없는 형의 * 2 가 되며 저장할 수 있는 크기는 n이 없는 형의 절반입니다.)

5. 날짜형식

 데이터형  크기  범위
 Datetime  8byte  1753-01-01 ~ 9999-12-31(ms단위까지)
 SmallDateTime  4byte  1990-01-01 ~ 2079-06-09(분까지)

참고 :
년도를 4자리로 하지 않고 두자리만 지정시 년도는 다음과 같이 인식됩니다.
00 ~ 49 까지 : 2000년대
50 ~ 99 까지 : 1900년대

6. 이진형식

 데이터형  범위
 Binary(n) / VarBinary(n)  1~8000까지의 이진데이터(n을 생략시 1, cast에서 지정하지 않으면 30을 기본)
 Image  232-1byte(2,147,483,647 byte까지)

7. 시스템 형식

 데이터형  설명
 Cursor  커서
 Sql_Variant  IMAGE, NTEXT, NVARCHAR(MAX), TEXT, TIMESTAMP, VARCHAR(MAX), XML를 제외한 모든 자료형 대체가능
 Table  Table
 TimeStamp  TABLE의 행이 바뀔때마다 바뀌는 고유한 숫자(8 byte)
 Uniqueidentifier  Newid()를 통해 발생되는 고유값으로 16진수로 구성된 각 자리수가 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx형태로 구성되며 IS NULL이나 IS NOT NULL, =, <=, >=, <>, >, < 의 연산자만 허용합니다.
 Xml  Xml

8. 사용자 형식

(1) sp_addtype

sp_addtype 이름, '데이터형', null 여부, '소유자' 의 형태로 씁니다. null여부와 소유자는 생략할 수 있는데 이경우 null허용하게 되며 해당 데이터형은 현재사용자가 소유자가 되는것이 기본입니다.

sp_addtype postal, 'Char(07)';
Go

Declare @ipostal As postal;
Set @ipostal = '780-080';
Select @ipostal;


지정한 사용자 형식을 삭제하는 방법은 다음과 같습니다.

sp_droptype postal;

(2) Create Type

Create Type은 sp_addtype에 비해 소유자를 지정할 수 없을뿐 sp_addtype과 같습니다.
사용형식은 'Create Type 이름 From 데이터형, null 여부'로 구현됩니다.

Create Type postal From Char(07) Not Null;
Go

Declare @ipostal As postal;
Set @ipostal = '780-080'
Select @ipostal;


지정한 사용자 형식을 삭제하는 방법은 다음과 같습니다.

Drop Type postal;


9. ISO 표준 형식


MS SQL Server는 ISO와의 호환을 위해 다음 단어를 해당 형식으로 일치시켰습니다. 따라서 Char대신 Character를 사용할 수 있습니다.


 본래형식

 ISO형식

 Char

 Character

 VarChar

 Character Varying

 Varbinary

 Binary Varying

 Decimal

 Dec

 Float

 Double Precision

 Int

 Integer

 nChar

 National Character

 nVarChar

 National Character Varying

 RowVersion

 Timestamp


2 0
1
블로그 이미지

클리엘