코락 CoRock
코딩하는 락스타
코락 CoRock
  • 분류 전체보기 (393)
    • frameworks (19)
      • spring (19)
      • spring-boot (0)
      • testing (0)
    • languages (94)
      • java (39)
      • kotlin (0)
      • python (42)
      • r (13)
    • libraries (0)
    • programming (239)
      • android (13)
      • c (17)
      • cpp (22)
      • database (18)
      • design-pattern (4)
      • data-structures (11)
      • git (8)
      • hadoop (6)
      • html-css (7)
      • issue (4)
      • javascript (26)
      • jsp (34)
      • os (29)
      • php (6)
      • preferences (19)
      • etc (15)
    • discography (37)
      • k-pop (18)
      • pop (19)
    • blog (3)

블로그 메뉴

  • Programming
  • Java
  • JavaScript
  • Discography
  • K-Pop Songs
  • Pop Songs
  • Blog
  • Guestbook

공지사항

인기 글

태그

  • oracle
  • 자바스크립트
  • CentOS
  • 파이썬
  • javascript
  • python
  • jsp
  • r
  • Android
  • linux
  • Java
  • Spring

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
코락 CoRock

코딩하는 락스타

[33-js-concepts] 12. 비트 연산자, 형식화 배열, 버퍼 (Bitwise Operators, Type Arrays and Array Buffers)
programming/javascript

[33-js-concepts] 12. 비트 연산자, 형식화 배열, 버퍼 (Bitwise Operators, Type Arrays and Array Buffers)

2020. 1. 22. 12:59
반응형

https://jsperf.com/or-vs-floor/2

 

자바스크립트에서 모든 숫자는 부동 소수점형 숫자형으로 취급된다.

자바스크립트에서 비트연산을 할때는 정수형으로 변환한 후 연산을 실행한다.

이러한 특성 때문에 다른 네이티브 언어에서의 비트연산자에 비해 속도가 매우 느리다.

속도 상의 이유로 비트연산자를 고집할 필요는 없다.

 

비트 연산자의 종류

AND 연산::&

OR 연산::|

XOR 연산::^

NOT 연산::~

왼쪽 쉬프트 연산:: <<

부호유지 오른쪽 쉬프트 연산::>>

부호 버림 오른쪽 쉬프트 연산::>>>

 

const AA =25;
const BB =3;
console.log(AA,"(",AA.toString(2),")",'&',BB,"(",BB.toString(2),")","=",(AA &BB),"(",(AA &BB).toString(2),")");
console.log(AA,"(",AA.toString(2),")",'|',BB,"(",BB.toString(2),")","=",(AA |BB),"(",(AA |BB).toString(2),")");
console.log(AA,"(",AA.toString(2),")",'^',BB,"(",BB.toString(2),")","=",(AA^BB),"(",(AA^BB).toString(2),")");
console.log(AA,"(",AA.toString(2),")",'>>',BB,"=",(AA > >BB),"(",(AA > >BB).toString(2),")");
console.log(AA,"(",AA.toString(2),")",'>>>',BB,"=",(AA > > >BB),"(",(AA > > >BB).toString(2),")");
console.log(AA,"(",AA.toString(2),")",'<<',BB,"=",(AA < <BB),"(",(AA < <BB).toString(2),")");
console.log("~",AA,"(",AA.toString(2),")","=",~AA,"(",(~AA).toString(2),")")
 
/*
 
25 ( 11001 ) & 3 ( 11 ) = 1 ( 1 )
25 ( 11001 ) | 3 ( 11 ) = 27 ( 11011 )
25 ( 11001 ) ^ 3 ( 11 ) = 26 ( 11010 )
25 ( 11001 ) >> 3 = 3 ( 11 )
25 ( 11001 ) >>> 3 = 3 ( 11 )
25 ( 11001 ) << 3 = 200 ( 11001000 )
~ 25 ( 11001 ) = -26 ( -11010 )
 
*/

 

And 마스크 연산과  OR 선택적 스위칭

const R =44< <16;
const G =128< <8;
const B =77;
const color =R |G |B;
console.log("color:",color.toString(16));
 
const R_val =(color &0xff0000) > >16;
const G_val =(color &0x00ff00) > >8;
const B_val =(color &0x0000ff);
console.log("R=",R_val,"=>",R_val.toString(16));
console.log("G=",G_val,"=>",G_val.toString(16));
console.log("B=",B_val,"=>",B_val.toString(16));
 
/*
 
color: 2c804d
R= 44 => 2c
G= 128 => 80
B= 77 => 4d
 
*/

 

XOR을 이용한 스위칭

let flag =true;
flag^ =1;
console.log(Boolean(flag));
flag^ =1;
console.log(Boolean(flag));
 
/*
false
true
*/

 

비트연산과 일반연산의 속도비교

console.time("*");
let sum =1;
for(let i =0;i <1000000000;i + +)//10억번
{
    sum * =2;
    sum / =2;
}
console.log('(*)',sum);
console.timeEnd("*");
 
console.time("<<");
sum =1;
for(let i =0;i <1000000000;i + +)
{
    sum < < =1;
    sum > > =1;
}
console.log('(<<)',sum);
console.timeEnd("<<");
 
/*
 
(*) 1
*: 1093.001ms
(<<) 1
<<: 608.964ms
 
*/
반응형
저작자표시 비영리 변경금지 (새창열림)
    'programming/javascript' 카테고리의 다른 글
    • [33-js-concepts] 14. 팩토리와 클래스 (Factories and Classes)
    • [33-js-concepts] 13. DOM과 Layout Trees (DOM and Layout Trees)
    • [33-js-concepts] 11. 자바스크립트 엔진 (JavaScript Engines)
    • [33-js-concepts] 10. setTimeout, setInterval and requestAnimationFrame
    코락 CoRock
    코락 CoRock
    A COder dreaming of being a ROCKstar

    티스토리툴바