무엇 CHAR_BIT은?
http://graphics.stanford.edu/~seander/bithacks.html에서 분지 없이 정수를 절대 값(복근)을 계산하:코드를 인용해.
int v; // we want to find the absolute value of v
unsigned int r; // the result goes here
int const mask = v >> sizeof(int) * CHAR_BIT - 1;
r = (v + mask) ^ mask;
-특허권 변화:
r = (v ^ mask) - mask;
뭐가CHAR_BIT
어떻게 사용합니까?
CHAR_BIT
의 비트수입니다.char
. 요즘엔, 거의 모든 아키텍처들이 아니라 그 사건 항상 바이트당 8비트를 사용한다.몇몇 나이 든 기계7-bit 바이트를 가지곤 했다.
에서 찾을 수 있습니다.<limits.h>
.
두 가지 질문에 모두 답하려고 한다(무엇이?)CHAR_BIT
및 원래의 질문의 암묵적인 질문(이것이 어떻게 기능하는가)을 나타냅니다.
A char
C 와 C++ 는, C 프로그램이 주소 지정할 수 있는 메모리의 최소 단위를 나타냅니다*
CHAR_BIT
C 와 C++ 는, 의 비트수를 나타냅니다.char
. char 타입의 다른 요건 때문에 항상 8 이상이어야 합니다.현대의 모든 범용 컴퓨터에서는 실제로는 정확히 8이지만, 일부 이력 시스템이나 전문 시스템은 더 높은 가치를 가질 수 있습니다.
Java에는 다음과 같은 기능이 없습니다.CHAR_BIT
또는sizeof
자바의 모든 원시 타입은 고정된 크기이고 오브젝트의 내부 구조는 프로그래머에게 불투명하기 때문에 그것은 필요하지 않다.이 코드를 Java로 변환하는 경우 간단히 대체할 수 있습니다.sizeof(int) * CHAR_BIT - 1
고정값 31만큼.
이 특정 코드에서는, 이 코드를 사용하여, 네트워크내의 비트수를 계산하고 있습니다.int
이 계산에서는, 다음의 것을 전제로 하고 있는 것에 주의해 주세요.int
type에 패딩 비트가 포함되어 있지 않습니다.
컴파일러가 서명된 번호의 비트 시프트에 따라 연장 서명을 선택하고 시스템에서 음수에 대해 2s의 보완 표현을 사용한다고 가정하면 이는 다음과 같습니다.mask
양의 값 또는 0의 경우 0이 되고 음의 값은 -1이 됩니다.
2의 보수를 부정하려면 비트 단위로 실행한 후 1을 추가해야 합니다.마찬가지로 1을 빼서 비트 단위로 부정할 수 있습니다.
여기서도 2개의 보형 표현 -1이 모두 1로 표현된다고 가정하면 배타적이거나 -1이면 비트 부정에 해당합니다.
따라서 v가 0이면 숫자는 그대로이고 v가 1이면 부정됩니다.
주의할 점은 C 및 C++에서 서명된 오버플로는 정의되지 않은 동작이라는 것입니다.그래서 이걸 이용해서abs
가장 음의 값에 대한 구현은 정의되지 않은 동작으로 이어집니다.이는 프로그램의 마지막 줄이 부호 없는 int로 평가되도록 캐스트를 추가하여 수정할 수 있습니다.
* 일반적으로 하드웨어에 대응할 수 있는 최소 메모리 유닛과 동일할 필요는 없습니다.실장에서는, 복수의 하드웨어 어드레싱 가능한 메모리를 프로그램 어드레싱 가능한 메모리의 1 유닛에 조합하거나, 하드웨어 어드레싱 가능한 메모리의 1 유닛을 프로그램 어드레싱 가능한 메모리의 복수의 유닛으로 분할할 수 있습니다.
이 코드는 서명된 유형의 오른쪽 비트 시프트 구현 정의 동작에 따라 달라집니다.gcc는 항상 정상 동작(사인 비트 확장)을 제공하지만 ISO C에서는 구현이 상위 비트를 0으로 채울 수 있습니다.
이 문제를 회피하는 방법 중 하나는 다음과 같습니다.
#ifdef HAVE_SIGN_EXTENDING_BITSHIFT
int const mask = v >> sizeof(int) * CHAR_BIT - 1;
#else
int const mask = -((unsigned)v >> sizeof(int) * CHAR_BIT - 1);
#endif
의 ★★★★★★★★★★★★★★★★★.Makefile
★★★★★★★★★★★★★★★★★」config.h
를 정의할 수 .HAVE_SIGN_EXTENDING_BITSHIFT
빌드 시 플랫폼에 따라 달라집니다.
언급URL : https://stackoverflow.com/questions/3200954/what-is-char-bit
'programing' 카테고리의 다른 글
안타깝게도 My App이 중지되었습니다.어떻게 하면 해결할 수 있을까요? (0) | 2022.07.31 |
---|---|
자바에서는 나이를 어떻게 계산하나요? (0) | 2022.07.31 |
Vue2의 다른 구성 요소에서 구성 요소 업데이트 (0) | 2022.07.31 |
Vue 사용.여러 개의 중첩된 객체가 있는 객체에 설정 (0) | 2022.07.31 |
Vuex와 array.findIndex: 일치하는 항목을 찾을 수 없습니다. (0) | 2022.07.31 |