int = long int는 32비트 프로세서에서는 4바이트(32비트)지만 64비트에서는 8바이트(64비트)임. 사양에 따라 크기가 가변임.
ㅅㅅㅅ(125.128)2015-04-21 15:16
아..감사합니다
64비트로 적용여부는 단순히 프로그램버전마다 다른건가요?
설치된os는 32비트인대...
글쓴이(175.207)2015-04-21 15:18
위에 내 덧글은 int 형 크기 부분에 대한 답변이었고, 스샷의 문제는 bitset 내부에서 알아서 가장 큰 정수 타입인 __int64 (64비트 자료형)으로 자동 형 변환해 주는 것으로 보임. 그래서 64비트까지는 표현할 수 있는데 65비트부터는 무조건 0으로 나오는 거. int가 64비트여서 저렇게 된 게 아니라 bitset 처리 방식 문제라는 거임.
d // Real world에서는 그렇게 쓰고 있긴 한데, 원래 int 형이 의도한 건 CPU의 word size를 커버하는 게 목적이어서 이상적으로는 ILP64가 이상적임. 다만 LLP64, LP64같은 게 나오게 된 건 해당 OS들이 하위 호환성을 중시해서 API를 하위 버전 OS의 기준에 맞추고 새로운 크기의 자료형이 필요하면 새로운 타입을 골라서 쓰고 식이다 보니 그렇게 된 거임.
고정 아님여
int = long int는 32비트 프로세서에서는 4바이트(32비트)지만 64비트에서는 8바이트(64비트)임. 사양에 따라 크기가 가변임.
아..감사합니다 64비트로 적용여부는 단순히 프로그램버전마다 다른건가요? 설치된os는 32비트인대...
위에 내 덧글은 int 형 크기 부분에 대한 답변이었고, 스샷의 문제는 bitset 내부에서 알아서 가장 큰 정수 타입인 __int64 (64비트 자료형)으로 자동 형 변환해 주는 것으로 보임. 그래서 64비트까지는 표현할 수 있는데 65비트부터는 무조건 0으로 나오는 거. int가 64비트여서 저렇게 된 게 아니라 bitset 처리 방식 문제라는 거임.
http://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models
컴파일러 명세나 C++같은 경우면 언어 명세에 따라서도 좀 갈림.
와,,진짜 감사합니다 이런건 궁금해서 인터넷뒤져봐도 잘못찾겠더라고요
d // Real world에서는 그렇게 쓰고 있긴 한데, 원래 int 형이 의도한 건 CPU의 word size를 커버하는 게 목적이어서 이상적으로는 ILP64가 이상적임. 다만 LLP64, LP64같은 게 나오게 된 건 해당 OS들이 하위 호환성을 중시해서 API를 하위 버전 OS의 기준에 맞추고 새로운 크기의 자료형이 필요하면 새로운 타입을 골라서 쓰고 식이다 보니 그렇게 된 거임.
https://msdn.microsoft.com/ko-kr/library/f96c63ed.aspx
오른쪽 시프트는 기호 비트를 유지합니다. 부호 있는 정수가 오른쪽으로 이동하면 최상위 비트는 설정된 상태로 유지됩니다. 부호 없는 정수가 오른쪽으로 이동하면 최상위 비트는 해제됩니다.
컴파일러 명세가 그런건데 뭐그리 장황하게 설명을.. 애초에 부호있는 음수정수에 쉬프트연산은 표준으로 정의되있지 않는 미정의 동작임. 쓸일도 없고 쓸필요도 없음
내부에서 비트연산을 하니 당연한결과
bitset 까보니까 _Bitsperword = (int)(CHAR_BIT * sizeof (_Ty)), // bits in each word _Words = (int)(_Bits == 0 ? 0 : (_Bits - 1) / _Bitsperword)}; // NB: number of words - 1
_Ty _Array[_Words + 1]; // the set of bits
VS 2013에서 까보니까 enum : size_t {_EEN_BITS = _Bits}; // helper for expression evaluator typedef typename _If<_Bits <= 32, _Uint32t, _ULonglong>::type _Ty; 이렇게 되어있네 ㅇㅇ; 템플릿 인수가 32 보다 작거나 같으면 unsigned int고, 32보다 크면 unsigned long long 이고..
사양에 따라 가변인게 아니라 컴파일러가 명세하니까 저렇게 되는건데...
ㅇㅇ 컴파일러가 결정한다.
#include <limits.h> 안에 까봐