문제

여기요!나는이 코드를보고 있었다 http://www.gnu.org/software/m68hc11/examples/primes_8c-source.html

어떤 상황에서는 134행과 같이 16진수를 사용한다는 것을 알았습니다.

for (j = 1; val && j <= 0x80; j <<= 1, q++)

이제 왜 0x80을 사용할까요?나는 16진수에 능숙하지 않지만 온라인에서 10진수를 찾았는데 0x80에 128이 나왔습니다.

또한 134행 앞, 114행에는 다음과 같은 내용이 있습니다.

small_n = (n & 0xffff0000) == 0;

16진수를 10진수로 변환하면 해당 16진수에 대해 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.

C 또는 C ++의 이진 상수에 대한 옵션은 없지만 16 진수에서는 약간 명확합니다.0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 그리고 0x80.

두 번째 예에서 목표는 값의 낮은 두 바이트를 제거하는 것이 었습니다. 따라서 1,234,567,890의 가치가 주어지면 우리는 1,234,567,168로 끝나고 싶습니다.
16 진수에서는 더 명확합니다. 시작하십시오 0x4996:02d2, 끝 0x4996:0000.

다른 팁

16 진수 (또는 해당 물질의 옥탈) 숫자와 기본 비트 패턴 사이에 직접 매핑이 있으며, 이는 소수점의 경우가 아닙니다. 10 진수 '9'는 어떤 열이 있는지에 따라 비트 패턴과 관련하여 다른 것을 나타냅니다. 16 진수에서 '9'는 어떤 열에 관계없이 항상 '1001'을 의미합니다. 9 = '1001', 95 = '*1001*0101'등.

8 비트의 날의 흔적으로서 나는 16 진이 바이너리에 대한 편리한 속기를 발견합니다. 비트 twiddling은 죽어가는 기술입니다. 한 번 (약 10 년 전) 나는 대학에서 3 학년 네트워킹 논문을 보았습니다.

조금 마스크. 16 진수 값을 사용하면 기본 이진 표현을 쉽게 볼 수 있습니다. N & 0xffff0000 n의 상위 16 비트를 반환합니다. 0xffff0000 "바이너리에서 16 1 및 16 0"을 의미합니다.

0x80 "10000000"을 의미하므로 "00000001"으로 시작하여 "10000000"까지 왼쪽 "0000010", "0000100"등으로 계속 이동합니다.

0xFFFF0000은 32 비트 값에서 16 배 "1"및 16 회 "0"이라는 것을 이해하기 쉽고 4294901760은 마술입니다.

나는 C 언어의 C 제품군이 항상 10 대와 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 진수에서 값을 시각적으로 표현하면 코드가 더 읽기 쉽거나 이해할 수 있습니다. 예를 들어, 비트 마스킹 또는 비트 사용은 소수점의 숫자 표현을 볼 때 무질서하지 않습니다.

이것은 때때로 특정 가치 유형이 제공하는 공간의 양과 함께 할 수 있으므로 역할을 할 수도 있습니다.

일반적인 예는 이진 설정에있을 수 있으므로 소수점을 사용하여 일부 값을 표시하는 대신 이진을 사용합니다.

객체에 on 또는 꺼짐 값이있는 비 독점적 인 속성 세트 (3 개)가 있다고 가정 해 봅시다. 해당 속성의 상태를 나타내는 한 가지 방법은 3 비트입니다.

유효한 표현은 10 진수에서 0에서 7이지만 그렇게 명백하지는 않습니다. 이진 표현은 더 분명합니다.

000, 001, 010, 011, 100, 101, 110, 111

또한 일부 사람들은 16 진수에 매우 편안합니다. 또한 하드 코딩 된 마법 숫자는 그저 그저 그냥 사용하는 것이 중요하지 않습니다.

도움이되기를 바랍니다.

소수점 대신 16 진수를 사용하는 것은 컴퓨터가 비트 (이진수)로 작동하고 비트로 작업 할 때 16 진수를 사용하는 것이 더 이해하기 쉬우므로 10 진수에서 바이너리로 바이너리로 이동하는 것이 더 쉽게 이해할 수 있기 때문입니다. .

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 진에서 바이너리로 전달하는 것이 훨씬 간단합니다.

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...

바이트에는 8 비트가 있습니다. 16 개의 16 진수는 간결합니다. 가능한 바이트 값은 컬렉션 0..9의 두 문자를 사용하여 A, B, C, D, E, F를 사용하여 표현됩니다.

기본 256은 더 간결 할 것입니다. 가능한 모든 바이트는 고유 한 단일 캐릭터를 가질 수 있지만 대부분의 인간 언어는 256자를 사용하지 않으므로 Hex는 승자입니다.

간결한 것의 중요성을 이해하려면 1970 년대에 메모 바이트의 기억을 검사하고 싶을 때 16 진로 인쇄되었음을 고려하십시오. 인쇄물은 수천 페이지의 큰 종이를 사용합니다. 옥탈은 더 많은 나무를 낭비했을 것입니다.

더 정확하게 말하면 16진수와 10진수는 모두 NUMBERS입니다.기수(10, 16 등)는 해당 숫자를 더 명확하거나 더 편리한 방식으로 표시하는 방법입니다.

"어떤 것이 얼마나 많은가"를 논할 때 우리는 일반적으로 십진수를 사용합니다.컴퓨터에서 주소나 비트 패턴을 볼 때 개별 바이트의 의미가 중요할 수 있기 때문에 일반적으로 16진수가 선호됩니다.

16진수(및 8진수)는 2의 거듭제곱이라는 속성을 가지므로 비트 그룹을 훌륭하게 매핑합니다.16진수는 4비트를 하나의 16진수 니블(0-F)에 매핑하므로 바이트는 두 개의 니블(00-FF)에 저장됩니다.8진수는 DEC(Digital Equipment) 및 기타 구형 시스템에서 널리 사용되었지만 8진수 한 자리는 3비트로 매핑되므로 바이트 경계를 잘 넘지 않습니다.

전반적으로 기수를 선택하는 것은 프로그래밍을 더 쉽게 만드는 방법입니다. 도메인에 가장 잘 맞는 것을 사용하세요.

16 진수 또는 16 진수는 4 비트의 데이터, 0 ~ 15 또는 16 진수에서 F를 나타냅니다. 2 개의 16 진수 값은 바이트를 나타냅니다.

파일을 살펴보면 꽤 그로디 코드입니다. C를 잘하고 튜토리얼로 사용하지 않기를 바랍니다 ...

16 진수는 비트 레벨에서 직접 또는 그 위에 직접 작업 할 때 유용합니다. 예를 들어, 장치에서 나오는 비트를 직접보고있는 드라이버에서 작업하고 다른 사람이 일관된 결과를 읽을 수 있도록 결과를 두드러집니다. 이진을 읽기 쉬운 소형입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top