비트 너비를 존중하도록 가르쳐 준 첫 번째 버그는 계속 스스로 지우는 권한 플래그였습니다. 나는 비트 마스크를 정수 열로 OR하고 있었고,종종 전체 필드가 재설정되었습니다. 내가 그것을 본 후에는 원인이 당황 스러웠습니다: 나는 비트가 32 슬롯에 사는 것처럼 비트에 대해 추론했지만 값은 이미 넓어졌고 상류 어딘가에 있지 않은 길 잃은 비트는 내가 결코 설명하지 않은 비트를 뒤집었습니다. 나는 실제 너비의 실제 비트를 보여주는 계산기를 들고 앉아서 수정했습니다. 내 언어가 인쇄 한 깔끔한 십진수가 아닙니다. 이 가이드는 그 습관에 관한 것입니다 이진 계산기 Toolz.dev에서 모든 베이스를 한 번에 볼 수 있는 비트 수학을 수행하면 몇 시간의 추측이 절약되는 이유입니다.
TL;DR: 이진 계산기는 이진법,8 진법,10 진법,또는 16 진법으로 쓰여진 정수에 대해 산술 (덧셈,뺄셈, 곱셈,나눗셈) 과 비트 연산 (AND,OR, XOR,NOT, 시프트) 을 수행하고,한 번에 네 개의 밑수 모두에 결과를 보여줍니다. 산술은 어떤 크기에서도 정확합니다; 비트 연산은 선택된 비트 너비에 따라 달라집니다. The 이진 계산기 전적으로 브라우저에서 두 가지를 모두 수행하고 서명된 판독값과 서명되지 않은 판독값을 비트 단위로 보고합니다.
이진 계산기 란 무엇입니까?
이진 계산기는 2 진수의 정수에 대해 작동하는 도구이지만 유용한 것은 2 진수에 전혀 국한되지 않습니다. 생각하고 있는 2 진수,8 진수,10 진수 또는 16 진수를 선택하고 숫자를 입력하고 연산을 선택하고 답을 읽습니다. 좋은 것은 모든 밑수에 있는 답을 동시에 보여주므로 얻은 내용을 온전하게 확인하기 위해 별도의 변환을 실행하지 않습니다.
이것이 중요한 이유는 낮은 수준의 작업이 끊임없이 밑변 사이를 교차하기 때문입니다. 색은 16 진수이고,허가 마스크는 머릿속에서는 이진수이지만 데이터베이스에서는 십진수이고,네트워크 값은 한 구성에서는 8 진수이고 다른 구성에서는 십진수입니다. 모든 표현이 보이는 한 곳에서 수학을 수행하면 전체 전사 실수 클래스가 제거됩니다. 십진수 값을 십진수 계산기에 복사하고 먼저 올바르게 변환하기를 바라는 것이 아닙니다.
Toolz.dev 에서 흐름은 짧습니다. 입력 베이스를 선택하십시오. 첫 번째 값을 입력하십시오. 연산을 선택하십시오. 두 번째 값을 입력하십시오. 결과는 이진수,8 진수,10 진수,16 진수로 함께 나타나며 비트 연산의 경우 선택한 너비의 부호 있는 읽기와 비트 레이아웃도 보여줍니다.
어떤 작업을 지원합니까?
두 패밀리,그리고 그것들을 똑바로 유지하는 것이 전체 게임입니다. 산술 연산은 더하기,빼기, 곱하기,나누기, 모듈로입니다. 이것들은 진정한 숫자 값에 작용하므로 일반적인 수학처럼 행동하고 비트 너비에 신경 쓰지 않습니다. Division 은 정수 몫을 반환하고 나머지를보고하고 modulo 는 사람들이 가장 자주 거꾸로 얻는 구별 인 나머지 만 반환합니다.
비트 연산은 AND,OR, XOR,NAND, NOR,XNOR, NOT,그리고 좌우 시프트입니다. 이것들은 고정된 레지스터 내부의 원시 비트에 작용하므로,그 답은 전적으로 그 레지스터가 얼마나 넓은지에 달려 있습니다. AND,OR, XOR 은 일상적인 세 가지입니다: AND 는 비트를 마스크하고,OR 은 비트를 설정하며,XOR 은 그것들을 토글합니다. 부정된 형태인 NAND,NOR, XNOR 는 폭 내에서 그들의 보어 모든 비트를 뒤집지 않습니다. 시프트는 전체 패턴을 왼쪽이나 오른쪽으로 여러 위치로 이동하여 끝에서 떨어지는 비트를 떨어뜨립니다.
내가 원하는 것을 결정할 때 사용하는 빠른 정신 모델은 다음과 같습니다:
| 운영 | 상징 | 가족 | 일반적인 사용 |
|---|---|---|---|
| 더하기/빼기 | + / − | 산술 | 일반 정수 수학, 모든 크기 |
| 곱하기 / 나누기 | × / ÷ | 산술 | Division은 몫과 나머지를 보고합니다 |
| 모듈로 | 모드 | 산술 | 나머지만, 예를 들어 랩어라운드 인덱싱 |
| 그리고 | & | 비트위즈 | 마스크를 조금 벗고 플래그를 테스트합니다 |
| 또는 | | | 비트위즈 | 깃발을 설정하고 마스크를 결합하세요 |
| XOR | ^ | 비트위즈 | 비트, 저렴한 패리티 및 스왑을 전환합니다 |
| 아닙니다 | ~ | 비트위즈 | 너비 내의 모든 비트를 반전시킵니다 |
| 왼쪽/오른쪽으로 이동합니다 | << / >> | 비트위즈 | 2의 거듭제곱으로 곱하거나 나누면 필드가 됩니다 |
왜 비트폭을 선택해야 하나요?
이것은 비트 수학에 새로운 모든 사람을 트립 질문이며,그것은 계산기가 가장 독선적 인 하나입니다. 산술은 크기에 상관없이 명백한 답을 가지고 있습니다: 다섯 더하기 세는 바이트 또는 64 비트 단어로 상상하든 여덟 개입니다. 그러나 비트 NOT 는 얼마나 많은 비트가 존재하는지 알 때까지 전혀 대답이 없습니다. NOT of five 는 "flip every bit," 그리고 결과는 뒤집을 8 비트 또는 64 비트가 있는지에 따라 다릅니다.
Shifts 는 다른 방향에서 동일한 종속성을 갖습니다. 값을 충분히 멀리 왼쪽으로 이동하고 비트는 상단 가장자리에서 행진합니다. 사라지거나 래핑되는지 여부는 레지스터 크기에 따라 다릅니다. C,Java, Go 또는 Rust 의 고정 너비 정수 유형은 앞쪽의 너비를 정의하여 이에 답합니다: a uint8 8비트입니다 uint32 는 서른 둘이고,모든 비트 연산은 그 상자 안에서 일어납니다. 계산기는 정확히 여러분이 8,16, 32,64 비트를 고르게 함으로써 미러링합니다. 그래서 결과는 이상적인 무한 폭 추상화가 아니라 여러분의 실제 코드가 만들어낼 것과 일치합니다.
잘못된 너비를 선택하는 것은 반올림 오류가 아니며 다른 대답입니다. NOT of five 는 8 비트에서 250 이고 서른 둘에서 4294967290 입니다. 둘 다 너비에 대해 정확하며 다른 데이터 유형에 맞게 너비를 설정하는 습관을 얻는 것이이 도구가 권장하는 가장 유용한 단일 분야입니다.
two's complement 는 어떻게 결과에 나타나나요?
거의 모든 프로세서는 다음을 사용하여 부호 있는 정수를 나타냅니다 two's 보완그리고 계산기는 동일한 규칙을 따르므로 출력이 하드웨어와 일치합니다. two's 보수에서 레지스터의 상단 비트는 음의 가중치를 전달하므로 11111010 의 8 비트 패턴은 부호 없는 것으로 취급하면 250 으로 읽히고,상단 비트를 부호로 읽으면 −6 으로 읽습니다.
이 도구가 비트 단위 결과에 대한 두 판독값을 모두 보고하는 이유입니다. 8 비트의 5 에서 NOT 을 실행하면 비트 패턴 11111010 을 얻습니다. 계산기는 부호 없는 값 250,부호 있는 값 −6 및 이진 레이아웃을 보여 주므로 두 가지 방식으로 해석된 동일한 비트임을 알 수 있습니다. 이 이중 판독값은 "impossible" 로그에 나타나는 숫자의 고전적인 소스인 코드에서 부호 있는 유형과 부호 없는 유형 사이에 값이 교차할 때 필요한 것과 정확히 같습니다.
산술 결과는 음수가 될 때 동일한 규칙을 따릅니다. 5 에서 12 를 빼면 참 답은 계산기가 마이너스 기호가있는 십진수로 표시되는 −7 인 반면 이진,8 진수 및 16 진수 형식은 선택한 너비 내에서 two's-complement 패턴을 사용하는 반면 8 비트에서 11111001 음수 값과 비트 패턴을 나란히 보는 것은 "the sign is just the top bit" finally clicks 의 추상적 인 아이디어입니다.
이진수를 손으로 더하거나 빼고 여기에서 확인하려면 어떻게 해야 합니까?
이진 덧셈은 소수와 같은 캐리 규칙을 따르며 알파벳은 더 작습니다. 0 더하기 0은 0, 0 더하기 1은 1, 1 더하기 1은 0 캐리 1, 1 더하기 1 더하기 캐리는 1 캐리 1입니다. 따라서 1010 더하기 1100은 오른쪽에서 열별로 작동합니다: 0+0은 0, 1+0은 1, 0+1은 1, 1+1은 0 캐리 1, 캐리는 선행 비트가 되어 10110을 제공합니다. 이는 10110을 소수점 이하 22로 계산기에 펀칭하면 모든 베이스에서 한 번에 확인됩니다. 이것이 제가 인터뷰를 위해 다시 배우거나 누군가에게 가르칠 때 손 산술을 확인하는 방법입니다.
빼기는 two's complement 가 그것의 keep 을 얻는 곳입니다. 열을 가로질러 빌리는 것이 아니라 컴퓨터는 음수를 더하여 빼고,음수는 비트를 반전시키고 하나를 더함으로써 형성됩니다. 손으로 그렇게 할 필요는 거의 없지만 계산기가 음수 영역으로 깔끔하게 뺄 수 있는 이유를 설명합니다: 5 빼기 12 는 5 더하기 2's-complement 12 가 되고,결과는 위에서 설명한 −7 패턴에 대해 아무런 수학도 하지 않고 밑수 사이에 단일 값을 이동하려는 경우,the 숫자 베이스 변환기 동반 도구입니다 이진 변환기 산수를 하지 않고 텍스트를 비트로 바꾸는 경우를 처리합니다.
비트 연산은 실제로 언제 중요합니까?
초보자가 예상하는 것보다 더 자주,그리고 명백하지 않은 장소에서 "low level." 권한 시스템은 고전적인 경우입니다: 하나의 정수로 포장된 플래그 집합으로,여기서 당신은 OR 이 권한을 부여하고,AND 는 이를 취소할 보완 기능을 가지고 있으며,AND 는 하나를 테스트합니다. 기능 토글,유닉스 파일 모드,하드웨어 레지스터 맵은 모두 동일한 패턴을 사용합니다. 0o755 와 같은 값이나 로 정의된 상수를 본 적이 있다면 1 << 3, 당신은 비트 패킹을 만났습니다.
XOR 은 값싼 트릭과 실제 알고리즘에 모두 나타납니다: 비트 토글,패리티 계산,템프없이 고전적인 스왑. Shifts 는 일반 곱셈보다 훨씬 빠른 2 의 거듭제곱으로 곱하고 나누며 여러 개의 작은 필드를 하나의 단어로 묶습니다. 이것이 색상 값,네트워크 헤더 및 컴팩트 직렬화 형식이 작게 유지되는 방식입니다. 저는 역할 플래그를 비트 마스크로 저장하는 Laravel API 에서 RGBA 를 포장 된 정수로 읽는 React 캔버스에 이르기까지 스택을 가로 질러 끊임없이 구축되는 이러한 작업을 이해하는 것은 모든 곳에서 보답하는 작은 투자이며,이들이 어떻게 더 넓은 키트에 맞는지에 대해 썼습니다 개발자 생산성 도구 조각.
미묘한 실패는 눈에 보이는 계산기를 사용할 가치가 있게 만드는 것입니다. 잘못된 너비에 적용된 마스크는 의도하지 않은 비트를 자동으로 유지하거나 삭제합니다. 32 비트를 가정하는 시프트는 64 에서 다르게 동작합니다. 서명되지 않은 마스크에 대해 서명된 값 ANDed 는 two's-complement 비트를 볼 때까지 불가능해 보이는 숫자를 생성합니다. 너비를 조정하면서 비트 레이아웃이 변경되는 것을 보면 미스터리의 버그가 명백한 실수로 변합니다.
여기에도 티칭 각도가 있습니다. 제가 비트마스크를 새로운 사람에게 설명하면,소수는 쓸모가 없습니다: 12 AND 10 이 8 이라는 것은 1100 과 1010 을 정렬하고 AND 가 둘 다 1 인 열만 유지하는 것을 지켜보기 전까지는 아무 의미가 없습니다. 계산기는 소수점,8 진수,16 진수 옆에 이진 레이아웃을 보여주기 때문에,그 정렬을 대신해,연산은 암기하는 규칙이 되는 것을 멈추고 여러분이 볼 수 있는 것이 됩니다. 교대근무의 경우에도 마찬가지입니다. 여기서 왼쪽 교대근무는 왼쪽 한 열마다 슬라이딩하면서 값을 두 배로 늘린다는 것을 보여주는 것은 산술적 의미를 비트 레벨 메카닉에 연결하는데,단일 숫자는 결코 할 수 없는 방식입니다.
한계는 무엇이며, 내 데이터는 비공개입니까?
산술 측은 사실상 크기 제한이 없습니다. 계산기는 JavaScript's 를 사용합니다 빅인트에서 표준화된 임의 정밀도 정수 유형입니다 ECMAScript따라서 수십 자리의 숫자를 추가하거나 곱하는 것은 조용한 오버플로 없이 정확하게 유지됩니다. 이는 약 15자리를 지나면 정밀도가 떨어지고 큰 정수를 정확히 전혀 표현할 수 없는 일반 부동 소수점 숫자를 기반으로 구축된 계산기에 비해 실질적인 이점입니다.
비트 변은 의도적으로 선택한 너비에 의해 제한됩니다. 왜냐하면 그것이 포인트이기 때문입니다: 고정 너비 작업은 고정 레지스터 내부에서만 의미가 있습니다. 너비가 유지할 수있는 것보다 큰 값을 입력하면 계산기가 해당 너비로 줄이고 경고하므로 절단은 결코 조용히 일어나지 않습니다. 시프트는 정상 최대값으로 캡핑되므로 폭주 시프트 금액이 페이지를 걸 수 없습니다.
개인 정보 보호에서는 모든 것이 브라우저에서 실행됩니다. 입력 한 내용이 업로드되거나 기록되거나 저장되지 않으며 페이지가로드 된 후 인터넷에서 연결을 끊으면 도구가 계속 작동합니다. 그것은 소리보다 더 중요합니다: 사람들이 비트 계산기를 통해 실행하는 값은 종종 권한 마스크,토큰 또는 제어하지 않는 서버에 붙여 넣지 않는 시스템의 하드웨어 주소입니다. 어떤 도구가 시스템에 데이터를 보관하는지 신경 쓰면,the 온라인 도구의 데이터 개인 정보 보호 가이드는 집 전화하는 것들로부터 클라이언트 측 도구를 말하는 방법을 다룹니다. 이웃 저수준 작업의 경우, the IEEE 754 변환기 그리고 the 아스키 테이블 세트를 둥글게 처리하십시오.
자주 묻는 질문
이진수 두개를 어떻게 더하죠?
입력 베이스를 이진수로 설정하고 첫 번째 숫자를 입력하고 추가를 선택하고 두 번째 숫자를 입력한 후 결과를 읽습니다. 예를 들어 1010 더하기 1100 은 10110 이며 도구에서 10 진수로도 22,8 진수로도 26,16 진수로도 표시됩니다. 산술은 어떤 길이에서도 정확합니다.
산술 연산과 비트 연산의 차이점은 무엇입니까?
산술 연산 (덧셈,뺄셈, 곱셈,나눗셈, 모듈로) 은 참 숫자 값에 작용하며 비트 너비와 무관합니다. 비트 연산 (AND,OR, XOR,NOT, shift) 은 고정 너비 레지스터 내부의 원시 비트에 작용하므로 그 결과는 8,16, 32,64 비트를 선택하느냐에 따라 달라집니다.
왜 비트폭을 선택해야 하나요?
NOT 및 shift 연산은 레지스터 크기가 알려진 후에만 정의된 답을 갖습니다. 왜냐하면 어떤 비트가 존재하고 어떤 비트가 끝에서 떨어지는지에 따라 달라지기 때문입니다. 8,16, 32 또는 64 비트를 선택하면 계산기가 실제 프로그래밍 언어에서 특정 정수 유형이 어떻게 동작하는지 일치하게 됩니다.
계산기는 어떻게 부정적인 결과를 처리합니까?
음의 산술 결과는 소수점 이하 부호로 표시되며,이들의 이진,8 진수,16 진수 형태는 선택된 너비 내에서 two's-complement 를 사용합니다. 비트 단위 결과의 경우,도구는 부호 없는 값과 부호 있는 two's-complement 값을 모두 보고합니다.
소수점에 16진수를 추가하는 것처럼 밑수를 혼합할 수 있나요?
두 피연산자는 모두 선택한 단일 밑수에서 읽으므로 하나의 계산에서 밑수를 혼합할 수 없습니다. 16 진수와 10 진수 값을 결합하려면 먼저 그 중 하나를 변환한 다음 같은 밑수에 둘 다 입력합니다. 결과는 항상 네 개의 밑수 모두에 표시됩니다.
내가 나눌 때 계산기는 무엇을합니까?
Division 은 정수 몫을 반환하고,나눗셈이 정확하지 않은 경우 도구는 나머지를 메모로 보고합니다. 나머지를 자체적으로 얻으려면 대신 Modulo 연산을 사용하여 나머지만 반환합니다.
숫자가 얼마나 클 수 있습니까?
산술은 자바스크립트 BigInt 를 사용하므로 수십 자릿수의 숫자가 오버플로 없이 정확하게 처리됩니다. 비트 연산은 선택한 너비에 의해 제한됩니다; 이를 초과하는 값은 해당 너비로 줄어들며,도구는 그런 일이 발생하면 경고합니다.
내 데이터가 아무데나 전송되나요?
아니요. 모든 계산은 브라우저에서 JavaScript 로 실행됩니다. 입력한 내용은 전송,기록 또는 저장되지 않으며 페이지가 로드된 후 인터넷에서 연결을 끊어도 도구가 계속 작동합니다.
무료로 직접 수학을 시도해 보세요 이진 계산기. 그것은 아무것도 올려주기하지 않는 당신의 브라우저에서,완전히, 이진법,8 진법,소수, 및 16 진법에 산술과 비트 연산을,처리합니다.



