programing

64비트 Windows에서 긴 비트 크기

prostudy 2022. 5. 15. 23:42
반응형

64비트 Windows에서 긴 비트 크기

얼마 전, 누군가 내게 그런 말을 했다.long64비트 기계에 64비트가 없고 항상 사용해야 한다.int이것은 나에게 말이 되지 않았다.나는 (애플의 공식 사이트에 있는 것과 같은) 문서들이 이렇게 말하는 것을 본 적이 있다.long때 CPU가 64비트인 것으로 나타났다. 64비트 CPU는 64비트인 것으로 나타났다. 64비트 CPU는 64비트인 것으로 나타났다. 64비트 CPU는 64센트인 것으로 나타났다. 64비트 CPU는 64센트였다.

  • Windows:long그리고int32비트를 유지하며, 64비트 정수에 대해 특별한 새로운 데이터 유형이 정의된다.

(http://www.intel.com/cd/ids/developer/asmo-na/eng/197664.htm?page=2)에서).

뭘 써야 하지?이런 걸 정의해야 할까?uwsw((서명되지 않은) 너비:long윈도우즈가 아닌 경우 대상 CPU 비트를 검사하시겠습니까?

유닉스 세계에서는 64비트 플랫폼용 정수와 포인터의 크기에 대한 몇 가지 가능한 배치가 있었다.가장 널리 사용되는 두 가지는 ILP64(사실, 이것의 예는 극히 일부에 지나지 않는다; 크레용은 그와 같은 것 중 하나였다)와 LP64(다른 거의 모든 것에 대해)이다.두문자어는 'int, long, pointer is 64비트'와 'long, pointers is 64비트'에서 유래한다.

Type           ILP64   LP64   LLP64
char              8      8       8
short            16     16      16
int              64     32      32
long             64     64      32
long long        64     64      64
pointer          64     64      64

ILP64 시스템은 LP64를 위해 포기되었다(즉, 후대에는 거의 모든 참가자가 Aspen 그룹의 권고에 따라 LP64를 사용했으며, 64비트 운영의 오랜 전통을 가진 시스템만이 다른 체계를 사용한다).현대의 모든 64비트 유닉스 시스템은 LP64를 사용한다.MacOS X와 리눅스는 둘 다 현대적인 64비트 시스템이다.

Microsoft는 64비트로 전환하는 데 다른 체계를 사용한다: LLP64('긴 길이, 포인터는 64비트').이는 32비트 소프트웨어를 변경 없이 재컴파일할 수 있다는 의미상 장점이 있다.그것은 다른 모든 사람이 하는 것과 다르다는 단점을 가지고 있으며, 또한 64비트 용량을 이용하도록 코드를 수정해야 한다.항상 수정이 필요했다; 그것은 단지 유닉스 플랫폼에서 필요한 수정이 아닌 다른 수정이었을 뿐이다.

플랫폼 중립 정수 유형 이름에 따라 소프트웨어를 설계하는 경우 C99를 사용하십시오.<inttypes.h>헤더, 플랫폼에서 유형을 사용할 수 있는 경우 서명(목록 없음) 및 서명되지 않은(목록되지 않음; 'u'로 접두사):

  • int8_t- 8비트 정수
  • int16_t- 16비트 정수
  • int32_t- 32비트 정수
  • int64_t- 64비트 정수
  • uintptr_t- 포인터를 넣을 수 있을 정도로 큰 부호 없는 정수
  • intmax_t- 플랫폼에서 가장 큰 정수 크기(대략 다음보다 큼)int64_t)

그런 다음, 응용 프로그램이 중요한 경우 이러한 유형을 사용하여 응용 프로그램을 코드화할 수 있으며, 시스템 유형(다른 유형일 수 있음)에 매우 주의하십시오.라는 것이 있다.intptr_t 두 인 포인 고인 고인 고고하 기의 로서만 사용해야 한다. 사용하지 않거나 두 개의 감산 결과로만 사용할 계획임uintptr_t값(값)ptrdiff_t).

그러나 의문점이 지적하듯이(불신할 수 없음) 64비트 컴퓨터의 정수 데이터 유형의 크기에 대해서는 다른 시스템이 존재한다.익숙해져라. 세상은 변하지 않을 것이다.

질문이 Microsoft C++ 컴파일러에 대한 것인지, Windows API에 대한 것인지 명확하지 않다.그러나 [c++] 태그가 없기 때문에 Windows API에 관한 것이라고 생각한다.몇몇 답은 연결고리가 썩어서 문제가 있어서 나는 다른 연결고리를 제공하고 있다.


다다닥다닥과 API 에 대한 자세한 은 Windows API를 참조하십시오.INTLONGMSDN에는 다음과 같은 페이지가 있다.

Windows 데이터 유형

이 정보는 다음과 같은 다양한 Windows 헤더 파일에서도 사용할 수 있다.WinDef.h여기에 몇 가지 관련 유형을 나열해 놓았다.

유형 | S/U | x86 | x64----------------------------+-----+--------+-------바이트, 부울 | U | 8 비트 | 8 비트----------------------------+-----+--------+-------쇼트 | S | 16 비트 | 16 비트USHOT, WORD | U | 16 비트 | 16 비트 | 16 비트----------------------------+-----+--------+-------INT, LONG | S | 32 비트 | 32 비트UINT, ULONG, DWORD | U | 32 비트 | 32 비트 | 32 비트----------------------------+-----+--------+-------INT_PTR, LONG_PTR, LPARAM | S | 32비트 | 64비트UINT_PTR, ULON_PTR, WPARAM | U | 32비트 | 64비트----------------------------+-----+--------+-------롱롱 | S | 64 비트 | 64 비트ULONG롱, QWORD | U | 64 비트 | 64 비트 | 64 비트

열 "S/U"는 서명/서명되지 않은 것을 의미한다.

마이크로소프트는 또한 포인터와 같은 크기의 정수에 대해 UINT_PTR과 INT_PTR을 정의했다.

여기 마이크로소프트의 특정 유형의 목록이 있다 - 이것은 그들의 드라이버 참조의 일부지만, 나는 그것이 일반 프로그래밍에도 유효하다고 생각한다.

MSDN에 대한 이 문서는 폭에 대해 좀 더 명시적인 (Windows에서 사용 가능한) 많은 유형의 별칭을 참조한다.

http://msdn.microsoft.com/en-us/library/aa505945.aspx

예를 들어 ULONGLONG을 사용하여 64비트 미서명 적분 값을 참조할 수 있지만 UINT64도 사용할 수 있다.(ULONG과 UINT32도 마찬가지).이게 좀 더 선명해질까?

일정 길이의 정수를 사용해야 하는 경우 플랫폼 독립 헤더를 사용하여 도움을 받으십시오.부스트는 보기에 좋은 곳이다.

의 크기longWindows 플랫폼에서 32비트(4바이트)

크기를 바이트 단위로 반환하는 를 사용하여 확인할 수 있다.

컴파일러/플랫폼에 대한 정보를 얻는 가장 쉬운 방법:

#include <iostream>

int main() {
  std::cout << sizeof(long)*8 << std::endl;
}

8배는 바이트에서 비트를 얻는 것이다.

특정한 크기가 필요할 때, 미리 정의된 라이브러리 유형 중 하나를 사용하는 것이 가장 쉬운 경우가 많다.이것이 바람직하지 않은 경우, 오토콘프 소프트웨어에서 자주 발생하는 작업을 수행할 수 있으며 필요한 크기에 적합한 유형을 구성 시스템이 결정하도록 할 수 있다.

참조URL: https://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows

반응형