왜 16진수를 사용하는가?
이봐요! http://www.gnu.org/software/m68hc11/examples/primes_8c-source.html에서 이 코드를 보고 있었어요.
일부 상황에서는 134행과 같은 16진수를 사용하기도 합니다.
for (j = 1; val && j <= 0x80; j <<= 1, q++)
그럼 왜 0x80을 사용하는 걸까요?저는 16진수를 잘 다루지는 못하지만, 온라인 16진수에서 10진수까지의 숫자를 찾았는데, 0x80에 128이 나왔습니다.
또한 134호선 앞 114호선에는 다음과 같은 기능이 있습니다.
small_n = (n & 0xffff0000) == 0;
16진수부터 10진수까지가 4294901760 이었어요.그래서 이 줄에서 그들은 AND를 만들고 그 결과를 0과 비교하고 있다?
왜 그냥 번호를 사용하지 않는 거죠?누구라도 설명해주실 수 있나요? 다른 상황의 예를 들어주세요.
또, 16진수 밖에 되지 않는 큰 코드의 행도 봐 왔습니다만, 그 이유를 제대로 이해하지 못했습니다. :).
두 경우 모두 실제 숫자가 아니라 숫자의 비트 패턴이 중요합니다.
를 들어, 첫 「」, 「」, 「」, 「」의 경우,j
루프가 진행됨에 따라 1, 2, 4, 8, 16, 32, 64가 되고 최종적으로 128이 됩니다.
바이너리, 즉,
0000:0001
,0000:0010
,0000:0100
,0000:1000
,0001:0000
,0010:0000
,0100:0000
★★★★★★★★★★★★★★★★★」1000:0000
.
까지) 없지만 16진수: C(C23또) + C++(C++14 hex)에서는합니다.에는 이진수 옵션이 없지만 16진수에서는 조금 더 명확합니다.0x01
,0x02
,0x04
,0x08
,0x10
,0x20
,0x40
, , , , 입니다.0x80
.
두 번째 예에서는 값의 하위2바이트를 삭제하는 것이 목표였습니다.1,234,567,890명 1,234,567,168명
16으로 합니다.먼저0x4996:02d2
은 , 로 끝납니다.0x4996:0000
.
트트마마 마다다다다다,n&n&0xffff0000
n. "16"의 합니다.0xffff0000
'의 0은 '16의 1과 16의 0'을 뜻합니다.
0x80
「은 에, 「」이 될 때까지,를 「 「등의 시킵니다.
C 계열의 언어가 항상 8진수 및 16진수를 지원하지만 바이너리는 지원하지 않는 것이 화가 납니다.바이너리를 직접 지원해주셨으면 합니다.
int mask = 0b00001111;
수년 전, 작업 중에 엄청난 양의 비트 레벨 계산이 수반되는 프로젝트를 진행하던 중, 저는 진저리가 나서 최대 8비트까지의 가능한 모든 이진 값에 대해 정의된 상수가 포함된 헤더 파일을 생성했습니다.
#define b0 (0x00)
#define b1 (0x01)
#define b00 (0x00)
#define b01 (0x01)
#define b10 (0x02)
#define b11 (0x03)
#define b000 (0x00)
#define b001 (0x01)
...
#define b11111110 (0xFE)
#define b11111111 (0xFF)
이로 인해 특정 비트레벨의 코드가 읽기 쉬워지는 경우가 있습니다.
16진법의 가장 큰 용도는 임베디드 프로그래밍일 것입니다.16진수는 하드웨어 레지스터에서 개별 비트를 마스킹하거나 여러 숫자 값을 단일 8, 16 또는 32비트 레지스터로 분할하는 데 사용됩니다.
개별 비트 마스크를 지정할 때 많은 사용자가 다음과 같이 시작합니다.
#define bit_0 1
#define bit_1 2
#define bit_2 4
#define bit_3 8
#define bit_4 16
etc...
잠시 후 다음 단계로 넘어갑니다.
#define bit_0 0x01
#define bit_1 0x02
#define bit_2 0x04
#define bit_3 0x08
#define bit_4 0x10
etc...
그런 다음 부정행위를 학습하고 컴파일러가 컴파일 시간 최적화의 일부로 값을 생성하도록 합니다.
#define bit_0 (1<<0)
#define bit_1 (1<<1)
#define bit_2 (1<<2)
#define bit_3 (1<<3)
#define bit_4 (1<<4)
etc...
16진수(16진수)는 4비트의 데이터(0~15 또는 HEX 0~F)를 나타냅니다.2개의 16진수 값은 1바이트를 나타냅니다.
16진수(또는 그 문제의 경우 8진수) 자릿수와 기본 비트 패턴 사이에는 직접 매핑이 있습니다.이것은 10진수에서는 해당되지 않습니다.10진수 '9'는 비트 패턴과 관련하여 비트 패턴과 직접적인 관계가 없는 열과 그 주위에 있는 숫자에 따라 다른 것을 나타냅니다.16진수에서 '9'는 어느 열에 있든 항상 '1001'을 의미합니다.9 = '1001', 95 = '*1001*0101' 등입니다.
내 8비트 날의 흔적으로 16진수는 바이너리(binary)의 편리한 줄임말이다.조금 만지작거리는 것은 죽어가는 기술이다.한번은 (약 10년 전) 대학교 3학년 네트워킹 페이퍼를 봤는데, 반의 10%(50명 중 5명 정도)만이 비트 마스크를 계산할 수 있었다.
바이트에는 8비트가 있습니다.16진수, 16진수, 간결해가능한 모든 바이트 값은 컬렉션 0.9의 두 문자에 a, b, c, d, e, f를 더한 값을 사용하여 표현됩니다.
베이스 256이 더 간결할 거야가능한 모든 바이트는 자체 문자를 가질 수 있지만, 대부분의 인간 언어는 256자를 사용하지 않기 때문에 Hex가 우승자입니다.
간결함의 중요성을 이해하려면 1970년대에 메가바이트의 메모리를 조사하려고 했을 때 16진수로 인쇄된 것을 생각해 보십시오.인쇄물에는 수천 페이지의 큰 종이가 사용될 것이다.옥탈은 더 많은 나무를 낭비했을 것이다.
파일을 보니 꽤 저속한 코드네요C를 잘해서 튜토리얼로 쓰지 말고...
16진수는 비트레벨 또는 비트레벨 바로 위에서 작업할 때 편리합니다.예를 들어 디바이스에서 들어오는 비트를 직접 보고 다른 사용자가 일관된 결과를 읽을 수 있도록 결과를 회전시키는 드라이버 작업입니다.이진수를 아주 쉽게 읽을 수 있는 콤팩트한 표현입니다.
0xffff0000은 32비트 값에서 16배 "1"과 16배 "0"이라는 것을 쉽게 이해할 수 있습니다.한편 4294901760은 매직입니다.
경우에 따라서는, HEX 로 값을 시각적으로 표현하면, 코드의 판독성이 향상하거나 이해하기 쉬워집니다.예를 들어, 비트 마스킹이나 비트 사용은 숫자의 십진수 표현을 볼 때 명확하지 않습니다.
이는 특정 값 유형이 제공해야 하는 공간의 양과 관련이 있을 수 있으므로, 이 또한 한 가지 역할을 할 수 있습니다.
일반적인 예는 이진수 설정일 수 있으므로 일부 값을 표시하기 위해 십진수를 사용하는 대신 이진수를 사용합니다.
오브젝트에 값 on 또는 off 중 하나를 갖는 비표준 속성 집합이 있다고 가정합니다(그 중 3개). 이러한 속성 상태를 나타내는 한 가지 방법은 3비트를 사용하는 것입니다.
유효한 표현은 10진수 0에서7까지입니다만, 이것은 그다지 명확하지 않습니다.더 확실한 것은 바이너리 표현입니다.
000, 001, 010, 011, 100, 101, 110, 111
또한, 어떤 사람들은 육각형에 매우 익숙합니다.또, 하드 코드화된 매직 넘버는 그것뿐이며, 번호를 매기는 시스템에 관계없이 그다지 중요하지 않습니다.
도움이 됐으면 좋겠어요.
일반적으로 십진수 대신 십진수 숫자를 사용하는 것은 컴퓨터가 비트(이진수)로 작동하기 때문이며, 십진수에서 이진수로 이동하는 것이 더 쉽기 때문에 십진수 숫자를 사용하는 것도 더 이해하기 쉽습니다.
OxFF = 1111 1111 ( F = 1111 )
그렇지만
255 = 1111 1111
왜냐면
255 / 2 = 127 (rest 1)
127 / 2 = 63 (rest 1)
63 / 2 = 31 (rest 1)
... etc
그것이 보이나요?16진수에서 2진수로 넘어가는 것이 훨씬 더 간단합니다.
좀 더 정확히 말하면 16진수와 10진수는 모두 숫자입니다.기수(베이스 10, 16 등)는 이러한 수치를 보다 명확하거나 편리한 방법으로 표시하는 방법입니다.
"어떤 것이 몇 개 있는가"를 논할 때 우리는 보통 십진법을 사용합니다.컴퓨터의 주소나 비트 패턴을 볼 때는 일반적으로 16진수를 사용하는 것이 좋습니다. 왜냐하면 대부분의 경우 개별 바이트의 의미가 중요할 수 있기 때문입니다.
16진수(및 8진수)는 2의 거듭제곱이라는 특성이 있기 때문에 비트의 그룹화를 적절하게 매핑합니다.16진수는 4비트를 1개의 16진수 니블(0-F)에 매핑하므로 바이트는 2개의 니블(00-FF)에 저장됩니다.옥탈은 DEC(Digital Equipment) 및 기타 오래된 기계에서 인기가 높았지만, 1개의 옥탈 자릿수는 3비트에 매핑되기 때문에 바이트 경계를 잘 넘지 않습니다.
전반적으로 기수를 선택하면 프로그래밍이 쉬워집니다. 도메인에 가장 적합한 기수를 사용하십시오.
언급URL : https://stackoverflow.com/questions/243712/why-use-hex
'programing' 카테고리의 다른 글
VueJ가 경로 변경 시 햄버거 메뉴를 닫다 (0) | 2022.07.24 |
---|---|
Console.log가 Vue js watchcher에서 두 번 호출됨 (0) | 2022.07.24 |
Java 8 메서드 레퍼런스: 파라미터화된 결과를 제공할 수 있는 공급업체 제공 (0) | 2022.07.24 |
C에서의 어레이 셔플 (0) | 2022.07.24 |
Nuxt: 명령 'nuxt'를 찾을 수 없음 - 출력 디렉터리 'dist/'이(가) 없습니다. (0) | 2022.07.24 |