JavaScript 자체는 단순한 언어로 간주 될 수 있지만, 우리는 지혜와 유연한 패턴으로 끊임없이 개선하고 있습니다. 어제 우리는 이러한 패턴을 JavaScript 프레임 워크에 적용했으며 오늘날 이러한 프레임 워크는 웹 응용 프로그램을 다시 이끌어냅니다. 많은 초보자 개발자들은 다양한 강력한 JavaScript 프레임 워크에 매료되지만 프레임 워크 뒤에 광대 한 실용적인 JavaScript 기술을 무시합니다. 이 기사는 지식 포인트에 대한 포괄적 인 소개를 제공합니다.
1. JS 정수 작동
부동 소수점을 정수로 변환하려면 | 0 및 ~~를 사용하여 유사한 parseint 및 math.round보다 빠르며 픽셀 및 애니메이션 변위와 같은 효과를 다룰 때 유용합니다. 이것이 성능 비교입니다.
var foo = (12.4 / 4.13) | 0; // 결과는 3var bar = ~~ (12.4/4.13)입니다. // 결과는 3입니다.
또 다른 작은 속임수는! ! 2 느낌표 마크, 값에 대해 이야기하고 부울 값으로 빠르게 변환 할 수 있습니다. 당신은 그것을 테스트 할 수 있습니다!
var eee = "eee"; Alert (!! eee)
반환은 사실입니다. 즉, 모든 값이 앞에 올랐습니다! ! 모두 진실과 같을 수 있습니다. 이 값이 원래 부울 값이거나 정의되지 않은 경우, null, 0, false, nan, '', 정의되지 않은, null, 0, false, nan, '', 이것들은 원래 거짓이므로 두 개가 추가됩니다! ! 그 후에도 여전히 Fasle입니다.
2. 기본 경고를 다시 작성하고 팝업 상자의 수를 기록하십시오.
(function () {var oldalert = wind3. 디지털 교환 방법 중간 변수를 선언하지 않습니다
두 숫자를 교환 할 때, 우리의 일반적인 접근 방식은 중간 변수를 선언하는 것이지만 오늘날의 접근 방식은 다소 이상합니다. 중간 변수를 선언하고 구현 방법을 확인할 필요가 없습니다!
var a = 1, b = 2; a = [b, b = a] [0]; console.log ( 'a :'+a+', b :'+b); // 출력 a : 2, b : 1
어때요,이 방법에는 새로운 느낌이 있습니까?
4. 모든 것이 대상입니다
JavaScript의 세계에서는 모든 것이 대상입니다. 널 및 정의되지 않은 외에도 다른 기본 유형의 숫자, 문자열 및 부울에는 해당 래퍼 객체가 있습니다. 객체의 특징 중 하나는 메소드를 직접 호출 할 수 있다는 것입니다.
숫자 기본 유형의 경우 Tostring 메소드를 호출하려고 할 때 실패하지만 괄호로 둘러싸인 후에는 실패하지 않습니다. 내부 구현은 기본 유형을 해당 래퍼 객체와 함께 객체로 변환하는 것입니다. 따라서 (1) .toString ()은 새 번호 (1) .toString ()과 같습니다. 따라서 실제로 숫자, 문자열, 부울 등의 기본 유형을 객체로 사용할 수 있습니다. 구문에주의를 기울이십시오.
동시에, 우리는 JavaScript의 숫자가 부동 소수점과 형성으로 나뉘어지지 않는다는 것을 알았습니다. 모든 숫자는 실제로 부동 소수점 유형이며 소수점을 생략합니다. 예를 들어, 1은 1으로 쓸 수 있습니다. 이것이 1. toString ()에 시도 할 때 오류 가보고되는 이유입니다. 따라서 올바른 방법은 다음과 같아야합니다. 여기서 괄호의 목적은 JS 파서를 수정하는 것입니다. 1 이후의 지점을 소수점으로 간주하지 않습니다. 내부 구현은 위에서 언급 한 바와 같이 1. 래퍼 객체가있는 객체로 변환 한 다음 메소드를 호출합니다.
5. IF 문의 변형
if 문을 작성 해야하는 경우 대신 JavaScript의 논리 연산자를 사용하여 다른 더 쉬운 방법을 시도하십시오.
var day = (새 날짜) .getday () === 0; // 전통적인 if 문의 if (day) {alert ( '오늘은 일요일!예를 들어, 위의 코드는 먼저 오늘 날짜를 얻습니다. 일요일이면 팝업 창이됩니다. 그렇지 않으면 아무것도 수행되지 않습니다. 논리 작업에는 단락이 있다는 것을 알고 있습니다. 논리와 표현의 경우, 두 가지 모두 사실이라면 결과가 참이 될 수 있습니다. 전날 변수가 False로 판단되면 전체 표현식에 대해 결과가 False이므로 후속 경고는 계속되지 않습니다. 전날이 사실 인 경우, 후속 코드는 전체 표현식의 진위를 결정하기 위해 다음 코드를 계속 실행해야합니다. 이 시점을 사용하여 IF의 효과가 달성됩니다.
전통적인 IF 문의 경우, 실행 바디 코드가 1 문을 초과하는 경우, 곱슬 괄호가 필요하고 쉼표 표현식을 사용하면 곱슬 교정기없이 모든 코드 막대를 실행할 수 있습니다.
if (conditoin) alert (1), alert (2), console.log (3);
6. 사용 ===, not ==
== (또는! =) 연산자는 필요할 때 자동으로 유형 변환을 수행합니다. === (또는! ==) 작업은 변환을 수행하지 않습니다. 값과 유형을 비교할 수 있으며 속도 측면에서 ==보다 더 나은 것으로 간주됩니다.
[10] === 10 //은 거짓이다 [10] == 10 //는 true'10 '== 10 //는 true'10'== 10 //가 false [] == 0 // is true [] === 0 //는 false '== false //이 사실입니다.
7. 클로저를 사용하여 개인 변수를 구현하십시오
기능인 (이름, age) {this.getName = function () {return name; }; this.setName = function (newName) {name = newName; }; this.getage = function () {return age; }; this.setage = function (newage) {age = newage; }; // 생성자 var 직업에서 초기화되지 않은 속성; this.getOccupation = function () {return Opccupation; }; this.setoccupation = function (newocc) {직업 = newocc; };}8. 객체 생성자를 만듭니다
기능인 (FirstName, lastName) {this.firstName = FirstName; this.lastname = lastName;} var saad = new Person ( "Saad", "Mousliki");9. 타입, 인스턴스 및 생성자를 사용하도록주의하십시오
var arr = [ "a", "b", "c"]; typeof arr; // ret // []
10. 자체 변동 기능을 만듭니다
이것을 종종 자체 투쟁 익명 함수 또는 즉각적인 통화 함수 표현식이라고합니다. 이것은 일반적으로 다음과 같이 생성 직후에 자동으로 실행되는 함수입니다.
(function () {// 자동으로 실행될 개인 코드) ()11. 배열에서 임의의 항목을 얻습니다
var 항목 = [12, 548, 'a', 2, 5478, 'foo', 8852, 'doe', 2145, 119]; var randomitem = items [math.floor (math.random () * 항목 .length)];
12. 특정 범위 내에서 난수를 얻습니다
이 스 니펫은 최소 값과 최대 값 사이의 임의의 급여 값과 같은 테스트 데이터를 생성 할 때 매우 유용합니다.
var x = math.floor (math.random () * (max -min + 1)) + min;
13. 0과 설정 최대 값 사이의 숫자 배열 생성
var numbersArray = [], max = 100; for (var i = 1; numbersArray.push (i ++) <max;); // 번호 = [0,1,2,3 ... 100]
14. 임의의 알파벳순을 생성합니다
기능 Generaterandomalphanum (Len) {var rdmstring = ""; for (; rdmstring.length <len; rdmstring += math.random (). tostring (36) .substr (2)); rdmstring.substr (0, len);} // 메소드 Generaterandomalphanum (15)을 호출합니다.열 다섯. 숫자 배열을 스크램블합니다
var numbers = [5, 458, 120, -215, 228, 400, 122205, -85411]; numbers = numbers.sort (function () {return math.random () -.0.5});/ * 배열 번호는 [120, 5, 228, -215, 400, 458, -85411, 12205]16. 문자열의 트림 함수
string.prototype.trim = function () {return this.replace (/^/s+|/s+$/g, "");};17. 다른 배열에 배열을 추가 (추가)하십시오
var array1 = [12, "foo", {이름 : "joe"}, -2458]; var array2 = [ "doe", 555, 100]; array.prototyp.push.apply (array1, array2);/ * array1은 [12, "foo", {name "joe", -2458, ", 55,", ","55, ", 55,", " */"18. 인수 객체를 배열로 변환하십시오
var argarray = array.prototype.slice.call (인수); [Translator 's Note : 인수 객체는 클래스의 배열 객체이지만 실제 배열은 아닙니다]
19. 매개 변수가 숫자인지 확인
함수 isnumber (n) {return! isnan (parsefloat (n)) && isfinite (n);}20. 매개 변수가 배열인지 확인하십시오
function isarray (obj) {return object.prototype.tostring.call (obj) === '[객체 배열]';}참고 : toString () 메소드가 재정의되면이 기술을 사용하여 원하는 결과를 얻지 못합니다. 또는 사용할 수 있습니다.
Array.isArray (OBJ); // 이것은 새로운 배열 메소드입니다
여러 프레임을 사용하지 않는 경우 인스턴스의 메소드를 사용할 수도 있습니다. 그러나 여러 개의 맥락이 있으면 잘못된 결과를 얻을 수 있습니다.
var myframe = document.createElement ( 'iframe'); docum // [a, b, 10] // 인스턴스의 인스턴스가 올바르게 작동하지 않으면 MyArray가 생성자를 잃어 버립니다. // 생성자는 배열의 Framesarr 인스턴스간에 공유되지 않습니다. // 거짓
[Translator 's Note : 인터넷에서 배열을 판단하는 방법에 대한 많은 논의가 있습니다. 이 기사는 자세히 작성되었습니다. 】
21. 숫자 배열에서 최대 또는 최소값을 얻습니다.
var 번호 = [5, 458, 120, -215, 228, 400, 122205, -85411];
var maxinnumbers = math.max.apply (수학, 숫자);
var mininnumbers = math.min.apply (수학, 숫자);
[Translator 's Note : 다음은 function.prototype.apply 메소드를 사용하여 매개 변수를 전달하는 기술입니다.
22. 배열을 지우십시오
var myArray = [12, 222, 1000]; myArray.length = 0; // myArray는 []와 같습니다.
23. 삭제를 사용하여 배열에서 항목을 삭제하지 마십시오.
배열에서 항목을 삭제하려면 삭제하는 대신 스플 라이스를 사용하십시오. Delete를 사용하면 원래 항목을 정의되지 않은 것으로 바꾸면 배열에서 실제로 삭제하지 않습니다.
이 방법을 사용하지 마십시오.
var 항목 = [12, 548, 'a', 2, 5478, 'foo', 8852, 'doe', 2154, 119]; items.length; // 11delete 항목을 반환합니다 [3]; // trueItems.length를 반환합니다. // 반환 11/ * 항목은 [12, 548, "a", undefined × 1, 5478, "foo", 8852, undefined × 1, "doe", 2154, 119]와 같습니다.
그리고 사용 :
var 항목 = [12, 548, 'a', 2, 5478, 'foo', 8852, 'doe', 2154, 119]; items.length; // return 11items.splice (3,1); items.length; // 반환 10/ * 항목은 [12, 548, "a", 5478, "foo", 8852, undefined × 1, "doe", 2154, 119]와 같습니다.
삭제 방법을 사용하여 객체의 속성을 삭제해야합니다.
24. 길이를 사용하여 배열을 자릅니다
위의 배열을 지우는 방식과 유사하게 길이 속성을 사용하여 배열을 자릅니다.
var myArray = [12, 222, 1000, 124, 98, 10]; myArray.length = 4; // myArray는 [12, 222, 1000, 124]와 같습니다.
또한 배열의 길이를 현재의 값보다 큰 값으로 설정하면 배열의 길이가 변경되고 새로운 정의되지 않은 항목이 추가됩니다. 배열의 길이는 읽기 전용 속성이 아닙니다.
myArray.length = 10; // 새 배열 길이는 10MyArray [myArray.Length -1]; // 한정되지 않은
25. 논리적 및/또는 조건부 판단을한다
변형 진술 인 경우 동일 (5)!
var foo = 10; foo == 10 && dosomething (); // if (foo == 10) dosomething (); foo == 5 || dosomething (); // if (foo! = 5) dosomething ();
논리적이며 기능 매개 변수의 기본값을 설정하는 데 사용할 수 있습니다.
함수 dosomething (arg1) {arg1 = arg1 || 10; // arg1이 설정되지 않으면 Arg1은 기본적으로 10으로 설정됩니다}26. Map () 메소드를 사용하여 배열에서 항목을 가로 지르십시오.
var squares = [1,2,3,4] .map (function (val) {return val * val;}); // 제곱은 [1, 4, 9, 16]와 같습니다.27. 숫자를 둥글게하고 N 이하 자리를 유지하십시오
var num = 2.443242342; num = num.tofixed (4); // NUM은 2.4432와 같습니다
28. 부동 소수점 번호 문제
0.1 + 0.2 === 0.3 //는 거짓입니다. false9007199254740992 + 1 // 900719929007199254740992 + 2 //와 같습니다. 9007199254740994
왜 이런 일이 일어나고 있습니까? 0.1+0.2는 0.300000000000000000000004입니다. 모든 JavaScript 번호는 IEEE 754 표준을 준수하는 64 비트 바이너리로 표현 된 내부적으로 플로팅 포인트 번호라는 것을 알아야합니다. 자세한 내용은이 블로그 게시물을 읽을 수 있습니다. tofixed () 및 toprecision () 메소드를 사용 하여이 문제를 해결할 수 있습니다.
29. 객체의 내부 속성을 가로 지르기 위해 For-In을 사용하여 속성을 확인하십시오.
다음 코드 스 니펫은 객체 속성을 통과 할 때 프로토 타입의 특성에 액세스하는 것을 피할 수 있습니다.
for (var name in object) {if (object.hasownproperty (name)) {// 이름으로 무언가를합니다}}서른, 쉼표 운영자
var a = 0; var b = (a ++, 99); console.log (a); // a는 1console.log (b)와 같습니다. // B는 99입니다
31. 계산 및 쿼리 해야하는 캐시 변수 (계산 또는 쿼리)
JQuery Selectors의 경우 이러한 DOM 요소를 더 잘 캐시합니다.
var navright = document.querySelector ( '#right'); var navleft = docum
32. IsFinite ()를 호출하기 전에 매개 변수를 확인하십시오.
Isfinite (0/0); // falseisfinite ( "foo"); // falseisfinite ( "10"); // trueisfinite (10); // trueisfinite (undifined); // falseFinite (); // falseisfinite (null); // 진실 !!!
33. 배열의 음의 지수를 피하십시오
var numbersArray = [1,2,3,4,5]; var from = numbersArray.indexof ( "foo"); //는 -1numbersarray.splice (from, 2)와 같습니다. // 반환됩니다 [5]
indexof를 호출 할 때 매개 변수가 음수인지 확인하십시오.
34
var person = {name : 'saad', age : 26, department : {id : 15, name : "r & d"}}; var stringfromperson = json.stringify (person);/ * stringfromperson은 "{"name ":"saad ","age ": 26,"department ": {"id ": 15,"이름 ":"r & d "}}}}}}}}}}}}}}}}}. JSON.PARSE (StringFromperson);/ * PersonfromString은 사람과 동일합니다 */35. Eval () 및 기능 생성자 사용을 피하십시오
평가 및 기능 생성자 사용은 스크립트 엔진을 호출 할 때마다 소스 코드를 실행 가능한 코드로 변환 할 때마다 매우 비쌉니다.
var func1 = 새로운 함수 (functionCode); var func2 = 평가 (functionCode);
36. ()와 함께 사용하지 마십시오.
()와 함께 사용하면 전역 변수를 삽입합니다. 따라서 동일한 이름을 가진 변수는 덮어 쓰고 불필요한 문제를 일으 킵니다.
37. 배열을 가로 지르기 위해 사용하지 마십시오
이 방법을 사용하지 마십시오.
var sum = 0; for (arraynumbers의 var i) {sum += arraynumbers [i];}더 나은 방법은 다음과 같습니다.
var sum = 0; for (var i = 0, len = arraynumbers.length; i <len; i ++) {sum+= arraynumbers [i];}추가적인 이점은 I 및 LEN 변수의 값이 한 번만 실행되며 이는 다음 방법보다 더 효율적이라는 것입니다.
for (var i = 0; i <arraynumbers.length; i ++)
왜? arrayNumbers.length는 루프가 루프 될 때마다 계산됩니다.
38. settimeout () 및 setinterval ()을 호출 할 때 문자열 대신 함수를 전달하십시오.
문자열을 settimeout () 또는 setInterval ()에 전달하면 스트링은 Eval과 함께 사용 된 것처럼 구문 분석됩니다.
사용하지 마십시오 :
setInterval ( 'dosomethingperiodically ()', 1000); settimeout ( 'dosomethingefterfiveseconds ()', 5000)
그리고 사용 :
setInterval (dosomethingperiodically, 1000); settimeout (dosomethingafterfiveseconds, 5000);
39. IF/Else의 긴 목록 대신 Switch/Case 문을 사용하십시오.
상황이 2보다 클 것이라고 판단 할 때 스위치/케이스를 사용하는 것이 더 효율적이고 우아합니다 (코드 구성이 더 쉽습니다). 그러나 10 개 이상의 판단이있는 경우 스위치/케이스를 사용하지 마십시오.
40. 숫자 범위를 판단 할 때 스위치/케이스를 사용하십시오
다음 상황에서는 스위치/케이스를 사용하여 수치 범위를 결정하는 것이 합리적입니다.
함수 getCategory (age) {var category = ""; Switch (true) {Case ISNAN (AGE) : 범주 = "나이가 아님"; 부서지다; 사례 (연령> = 50) : 범주 = "오래된"; 부서지다; 사례 (Age <= 20) : 범주 = "베이비"; 부서지다; 기본값 : 카테고리 = "Young"; 부서지다; }; 반환 범주;} getCategory (5); // "baby"를 반환합니다.[Translator 's Note : 일반적으로 말하면, 수치 범위를 판단하는 데 더 적합한 경우/다른 경우. 스위치/케이스는 가치 결정에 대한 판단에 더 적합합니다]
41. 생성 된 개체의 프로토 타입 개체를 지정하십시오
매개 변수를 프로토 타입으로 지정하는 객체를 만들기 위해 함수를 작성할 수 있습니다.
함수 클론 (Object) {function oneshotConstructor () {}; oneshotconstructor.prototype = 객체; 새로운 oneshotconstructor ();} 복제 (배열) .prototype; // []42. HTML 탈출 기능
함수 ESCAPEHTML (Text) {var grepacements = { "<": "<", ">": ">", "&": "&", "/" ":" ""}; return text.replace (/[<> & "]/g, function (문자) {반환 대체 [문자];});}43. 루프 내부에서 트리 캐치와 피를 사용하지 마십시오
런타임에 따라 잡기 절을 실행할 때마다 캡처 된 예외 객체가 변수에 할당되며 Try-Catch-Finally 구조 에서이 변수는 매번 생성됩니다.
이런 식으로 쓰지 마십시오 :
var object = [ 'foo', 'bar'], i; for (i = 0, len = object.length; i <len; i ++) {try {// 예외를 던지는 일을 수행} catch (e) {// 예외}}그리고 사용 :
var object = [ 'foo', 'bar'], i; try {for (i = 0, len = object.length; i <len; i ++) {// 예외를 던지는 일을 수행}} catch (e) {// 예외 핸들}44. xmlhttprequests의 시간 초과를 설정하십시오.
XHR 요청이 오랜 시간이 걸리면 (예 : 네트워크 문제로 인해) 요청을 중단해야하므로 XHR 호출에 settimeout ()를 사용할 수 있습니다.
var xhr = new xmlhttprequest (); xhr.onreadyStateChange = function () {if (this.readyState == 4) {CLEARTimeout (timeout); // 응답 데이터로 무언가를 수행}} var timeout = settimeout (function () {xhr.abort (); // 호출 오류 콜백}, 60*1000/*시간 후*/); xhr.open ( 'get', url, true); xhr.send ();또한 일반적으로 동기화 된 AJAX 요청을 모두 피해야합니다.
45 명. WebSocket 타임 아웃을 처리합니다
일반적으로 WebSocket 연결이 생성 된 후 활성화되지 않은 경우 서버는 30 초 후에 연결을 분리 (타임 아웃)합니다. 방화벽은 또한 비 활동 기간 후에 연결이 끊어집니다.
시간 초과 문제를 방지하려면 빈 메시지를 서버쪽에 간헐적으로 보내야 할 수도 있습니다. 이렇게하려면 코드에 다음 두 기능을 추가 할 수 있습니다. 하나는 연결을 유지하고 다른 하나는 연결을 유지하지 않습니다. 이 트릭을 사용하면 타임 아웃 문제를 제어 할 수 있습니다.
타이머리를 사용하십시오.
var timerid = 0; function keepalive () {var timeout = 15000; if (webSocket.readyState == WebSocket.Open) {WebSocket.Send ( ''); } timerid = settimeout (repualive, timeout);} 함수 cancelKeepalive () {if (timerid) {canceltimeout (timerid); }}webSocket 연결의 OnOpen () 메소드 끝에 recopAlive () 메소드가 추가되어야하며 onclose () 메소드의 끝에 cancelKeepalive ()가 추가됩니다.
46. 원래 운영자는 항상 기능 호출보다 더 효율적이라는 것을 기억하십시오. Vanillajs를 사용하십시오.
예를 들어 사용하지 마십시오.
var min = math.min (a, b); a.push (v);
그리고 사용 :
var min = a <b? ab; a [a.length] = v;
47. 정수에서 값을 무작위로 선택하십시오
다음과 같은 공식이 있으며,이 공식은 매우 유용하며 특정 유명한 인용문이나 뉴스 이벤트를 무작위로 표시 할 수 있습니다!
value = math.floor (math.random () *가능한 총 값+ 첫 번째 가능한 값)
예 : 2에서 10 사이의 값을 선택하려면 이렇게 쓸 수 있습니다.
var num = math.floor (math.random ()*9+2)
위의 공식을 기억하십시오! ~
JS 연산자의 단일 수직 막대의 사용 및 기능 "|" 및 JS 데이터의 처리
바로 지금, JS 정수를 작동 할 때는 소수점 인 Parseint를 제거하는 것과 같습니다. 양수가 math.floor ()와 동일하고 음수가 math.ceil ()과 동일 할 때 참고 :
1. Math.ceil ()은 상향 반올림으로 사용됩니다. 2. Math.floor ()는 아래쪽으로 둥글게 사용됩니다. 3. Math.Round () Round ()는 수학에서 일반적으로 사용됩니다. Console.log (0.6 | 0) // 0console.log (1.1 | 0) // 1console.log (3.65555 | 0) // 3console.log (5.99999 | 0) // 5console.log (-7.777 | 0) //-7
참고 : 프로세스 번호의 세 가지 방법 외에도 종종 parseint (), parsefloat (), tofixed () 및 toprecision () 등을 사용합니다. 간단한 설명 : 간단한 설명 :
Tofixed 방법의 사용은 다음과 같습니다.
100.456001.tofixed (2); //100.47100.456001.tofixed(3); //100.456number.prototype.tofixed.call(100.456001,2); //100.47
단점 : 사용 후 문자열이됩니다.
Toprecision 사용량은 다음과 같습니다.
99.456001. 투기 (5); //99.456100.456001.teprecision(5); //100.46number.prototype.teprecision.call (10.456001,5); //10.456
단일 수직 막대에 대한 작동 규칙
위의 예를 살펴본 후, 우리는 일반적으로 단일 수직 막대가 반올림 작업을 수행 할 수 있음을 알고 있습니다. 즉, 양수 부분 만 유지되고 소수 부분이 제거됩니다. 그러나 "| 0"은 어떻게 계산됩니까? "| 0"이 반올림의 목적을 달성 할 수있는 이유는 무엇입니까? 0이 아닌 경우 단일 수직 막대는 무엇입니까?
이 질문을 염두에두고 다음 예를 살펴 보겠습니다.
Console.log (3 | 4); //7console.log(4|4); //4console.log(8|3); //11console.log(5.3|4.1); //5console.log(9|3455); // 3455
찾을 패턴이없는 것 같습니다. 온라인으로 검색하십시오. http://tools.vevb.com/table/priority
이것은 단일 수직 막대 "|"를 언급합니다. 그러나 JavaScript는 없습니다.
좋아, 여기서 답을 발표하겠습니다. 실제로, 단일 세로 막대 "|" 2 자리 시스템으로 변환하여 얻은 결과입니다. 예를 들어 간단한 예를 들어 보겠습니다.
3 | 4는 이진으로 변환되고 011 | 100 첨가는 111 = 74 | 4가 이진으로 변환되고 100 | 100 첨가를 제공합니다.
그리고 나는 여기에 하나씩 나열하지 않을 것입니다. 단일 수직 막대 "|" 작동은 2 자리 시스템으로 변환하여 얻은 결과입니다! 모든 것을 배웠습니까?