문제

나는 이것을 보았다 unsigned "Typeless"유형은 몇 번 사용했지만 설명을 본 적이 없습니다. 해당하는 것이 있다고 생각합니다 signed 유형. 예는 다음과 같습니다.

static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next = next * 1103515245 + 12345;
    return((서명되지 않았습니다)(next/65536) % 32768);
}
void mysrand(서명되지 않은 씨앗) {
    next = seed;
}

지금까지 수집 한 것 :
- 내 시스템에서 sizeof(unsigned) = 4 (32 비트 부호없는 int의 힌트)
- 서명되지 않은 버전에 다른 유형을 캐스팅하기위한 속기로 사용될 수 있습니다.

signed long int i = -42;
printf("%u\n", (unsigned)i);

이것은 ANSI C입니까, 아니면 컴파일러 확장자입니까?

도움이 되었습니까?

해결책

unsigned 실제로 속기입니다 unsigned int, 표준 C에서 정의되어 있습니다.

다른 팁

unsigned 수단 unsigned int. signed 수단 signed int. 그냥 사용 unsigned 선언하는 게으른 방법입니다 unsigned int C. 예, 이것은 ANSI입니다.

역사적으로 C에서는 데이터 유형을 생략하면 "int"가 가정되었습니다. 따라서 "부호없는"은 "부호없는 int"의 속기입니다. 이것은 오랫동안 나쁜 관행으로 간주되어 왔지만, 여전히 그것을 사용하는 상당한 양의 코드가 있습니다.

C, unsigned 바로 가기입니다 unsigned int.

당신은 동일합니다 long 그것은 바로 가기입니다 long int

그리고 선언 할 수도 있습니다 unsigned long (그것은 될 것입니다 unsigned long int).

이것은 ANSI 표준에 있습니다

C 및 C ++에서

unsigned = unsigned int (Integer type)
signed   = signed int (Integer type)

n 비트를 함유하는 서명되지 않은 정수는 0에서 (2^n-1) 사이의 값을 가질 수 있으며, 이는 2^N 값입니다.

서명되지 않은 정수는 양수 또는 0입니다.

서명 된 정수는 2의 보충을 사용하여 컴퓨터에 저장됩니다.

다른 질문에서 답하십시오.

로부터 C 사양, 섹션 6.7.2 :

- 서명되지 않았거나 서명되지 않은 int

의미가 있습니다 unsigned, 유형을 지정하지 않으면 기본적으로 unsigned int. 그래서 글쓰기 unsigned a 와 같다 unsigned int a.

C17 6.7.2 §2에 따르면 :

각 유형 지정자 목록은 다음 멀티 세트 중 하나 여야합니다 (항목 당 둘 이상의 멀티 세트가있을 때 쉼표로 구분). 유형 지정자는 다른 순서로 발생할 수 있으며 다른 선언 지정자와 혼합 될 수 있습니다.

- 무효의
- 숯
- 서명 숯
- 서명되지 않은 숯
- 짧고, 서명 된 짧은 int, 또는 서명 된 짧은 int
- 서명되지 않은 짧거나 서명되지 않은 짧은 int
- int, 서명 또는 서명 된 int
- 서명되지 않았거나 서명되지 않은 int
- 길고, 길고, 긴 int 또는 서명 된 긴 int
- 서명되지 않았거나 서명되지 않은 긴 int
- 긴 길이, 긴 길이, 긴 긴 INT 또는 긴 긴 int 서명
- 서명되지 않은 길이 또는 서명되지 않은 긴 긴 int
- 뜨다
- 이중
- 긴 더블
- _bool
- float _complex
- 이중 _complex
- 긴 이중 _complex
- 원자 유형 지정자
- 구조 또는 노조 지정자
- 열관 지정자
- typedef 이름

그래서 unsigned int 우리는 글을 쓸 수 있습니다 unsigned 또는 unsigned int, 또는 우리가 미쳤다면, int unsigned. 후자는 표준이 "... 어떤 순서로든, 아마도 혼합 될 수있다"는 것을 허용하기에 충분히 어리 석다. 이것은 언어의 알려진 결함입니다.

적절한 C 코드 사용 unsigned int.

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