unsigned int 와 int 를 깊이 해석 합 니 다.
5761 단어 unsigned intint
signed 와 unsigned 와 int 간 의 관계 와 차 이 를 살 펴 보 겠 습 니 다.기호 가 있다 는 것 이 무엇 인지,기호 가 없다 는 것 이 무엇 인지 이 문 제 는 사실 매우 간단 하 다.예 를 들 어 5 와 5,5 는 기호 가 없고-5 는 기호 가 있다.쉽 죠?그러나 컴퓨터 에 있 는 이런 기 호 는 쉽 지 않다.우 리 는 기호 와 기호 가 없 는 차 이 를 설명 하기 전에 우 리 는 먼저 넘 치 는 것 이 어떻게 된 일 인지 알 아야 한다.기호 가 없 는 근본 적 인 원인 은 데이터 가 넘 치 는 현상 이 발생 했 기 때 문 이 라 고 할 수 있다.넘 침:우 리 는 데이터 가 컴퓨터 에 바 이 너 리 로 저장 되 고 일정한 공간 을 차지 하 는 것 을 알 고 있 으 며 이 공간 은 컴퓨터 가 분배 하 는 공간 에 속한다.컴퓨터 가 int 에 게 32 비트 또는 16 비트(컴퓨터 에 따라 다 를 수 있 음)의 공간 을 분배 한다.공간 이 제한 되 어 있 으 면 수치 가 제한 되 고 최대 치 와 최소 치 라 는 말 이 존재 한다.예 를 들 어 int 유형의 분배 16 비트 를 가정 하면 기호 가 없 는 유형의 최대 치 는 1111 1111 1111 1111 1111(16 개 1),즉 65535 이다.65535 를 초과 하면 넘 침 이 라 고 한다.그럼 어 떡 하지?65536 을 출력 하려 면 무엇 을 출력 합 니까?다음은 여러분 과 함께 보 겠 습 니 다.의문:어떤 독자 들 은 65535 가 이렇게 작 구나.나 는 내 가 65535 보다 많은 수 를 수출 하고 있 는 것 을 기억 합 니 다.해답:그것 이 바로 기호 가 없 는 정의 와 컴퓨터 컴 파일 러 가 있 는 이유 입 니 다.64 명의 컴퓨터 와 32 의 컴퓨터 는 다르다.그리고 int 가 몇 개의 바이트 를 차지 하 는 것 은 컴퓨터 컴 파일 러 와 관련 된 것 이다.그러나 현재 대부분의 컴퓨터 int 는 4 개의 바이트,즉 32 위 를 차지 하고 있 습 니 다.그러면 그의 최대 치 는 32 개의 1(2 진법)정도 의 수량 급 입 니 다.당신 은 이렇게 큰 수 를 실험 해 본 적 이 있 습 니까?
1.부호 없 는 정형(unsigned) int)(1)우 리 는 모두 정형 이 4 개의 바이트(어떤 컴 파 일 러 는 다 르 고 2 개 일 수 있다),즉 32 비트 라 는 것 을 알 고 있다.기호 가 없 는 정형 도 당연히 32 비트 이다.(2)32 자리 인 이상 부호 없 는 정형 의 수 치 는 32 개 0~32 개 1,즉 0~429497295(3)입 니 다.예 를 들 어 32 자리 가 좀 길 기 때문에 16 명의 unsigned short int 를 예 로 들 겠 습 니 다.short int 는 16 자리 이 고 기호 가 없 는 범 위 는 0~65535 이 며 10 진법 의 32767(이하 의 모든 예 를 들 어 이 숫자 로 일 을 말 합 니 다)에 있어 서 그의 2 진 은 다음 과 같 습 니 다. 0111 1111 1111 1111 은 부호 가 없 는 정형 32767 에 있어 서 바 이 너 리 의 가장 높 은 위 치 를 데이터 비트 라 고 한다.즉,그 0 은 데이터 비트 이 고 데이터 위 치 는 연산 에 참여 해 야 한다.만약 에 우리 가 0 을 1,즉 16 개 1 로 바 꾸 면 그의 10 진법 은 65535(즉 2 의 15 제곱+2 의 14 제곱...2 의 0 제곱 까지 계속 추가)이다.이것 은 기호 가 있 는 정형 과 다르다.(4)의 미 를 이해 하기 위해 프로그램 설명 을 한다.
#include <stdio.h>
main()
{
unsigned short int a=32767,b=a+1;//
printf("a=%u
b=%u
",a,b);//
}
정의 할 때 a=32767,즉 0111 1111 1111 1111 1111 1111,수출 은 32767,a+1=32768,이 진 은 1000 0000,입력 은 32768 이다.(3)에서 설명 한 바 에 따 르 면 기호 가 없 는 정형 의 바 이 너 리 최고 위 치 는 데이터 비트 이 고 데이터 위 치 는 0 에서 1 로 모두 정상 적 인 것 으로 계산한다.2.기호 정형(signed)int(1)int 유형 은 기본적으로 기호 가 있 기 때문에 int 는 실제 signed int 입 니 다.우 리 는 보통 sign(2)기호 정형 도 32 비트 입 니 다.(3)그것 의 수치 범 위 는 부호 가 없 는 정형 과 다르다.그 범 위 는-2147483648~2147483647 이다.이 범 위 는 부호 없 는 정형 의 절반 이 마이너스 로 변 한 것 으로 이해 할 수 있다.
32 분 이 좀 길 어서 16 분 의 short int 를 예 로 들 겠 습 니 다.short int 는 16 비트 이 고 기호 가 있 는 범 위 는-32768~32767 입 니 다.
이 럴 때 쯤 32768 이 2 진법 으로 1000 0000 0000 을 표시 했다 면 이 마이너스 32768 의 마이너스 번 호 는 어떻게 이해 하 느 냐 는 질문 이 나 올 것 이다.아래(4)를 보고 예 를 들 자.아니면 32767 을 예 로 들 면 바 이 너 리 는 다음 과 같다. 0111 1111 1111 1111 기호 정형 32767 에 있어 그의 이 진 최고 위 치 는 기호 위치(데이터 위치 가 아 닌)라 고 부 릅 니 다.기호 위 치 는 말 그대로 플러스 와 마이너스 번 호 를 결정 하 는 것 입 니 다.규칙:0 은 플러스 이 고 1 은 마이너스 입 니 다.(5)프로그램 이해(4)의 내용 을 열거
#include <stdio.h>
main()
{
short int a=32767,b,c,d;// 。
b=a+1;
c=a+2;
d=a+3;
printf("a=%d
b=%d
c=%d
d=%d
",a,b,c,d);
}
이때 의 결과 가 이런 것 임 을 알 수 있다.왜 일 까요?어떻게 된 거 야?사실 컴퓨터 에 서 는 마이너스 가 존재 하지 않 습 니 다.바 이 너 리 패 치 형식 으로 표시 되 고 저 장 됩 니 다.패 치 는 무엇 인가요?
(6)패 치,패 치 의 연산 이 무엇 입 니까?우리 간단 한 예 를 하나 열거 합 시다!그냥.-6...
우 리 는 이상 의 학습 을 통 해 음수 의 기호 위 치 를 1 로 알 고 있 기 때문에: (1)-6 의 바 이 너 리:1000 0000 0000 0110(원본 코드 라 고 하 는데 원본 코드 는 컴퓨터 가 나 에 게 보 여 준 것 이다) (2)원 코드 에 대한 반 코드 구하 기:1111 1111 1111 1001(반 코드 라 고 부 르 며 기호 위 치 를 변 하지 않 고 원 코드 중의 0 을 1 로 바 꾸 고 1 을 0 으로 바 꿉 니 다) (3)리 코딩 에 1:111 1111 1111 1010(패 치 라 고 하 며 패 치 는 컴퓨터 에 음 수 를 저장 하 는 형식)을 더 하면 컴퓨터 에 저 장 된 바 이 너 리 가 1111 1111 1011 1010 이 라면 우리 프론트 에 표 시 된 10 진 숫자 는-6 이다.즉,음 수 는 컴퓨터 에서 이 음수 의 바 이 너 리 패 치 형식 으로 저장 된다.
(7)보충 코드 가 무엇 인지 알 게 된 후에 우리 가 상술 한 그 절 차 를 살 펴 보 자. 32767 의 이 진 은 0111 1111 1111 1111 입 니 다.c 의 값 이 왜-32767 과 같 는 지 계산 해 보 겠 습 니 다.c=32767+2,c 의 바 이 너 리 는 1000 0000 0001(32767 의 바 이 너 리+2)입 니 다.c 의 이 바 이 너 리 는 컴퓨터 에 저 장 된 패 치 입 니 다.이 를 원 코드 로 바 꿔 야 합 니 다.즉,c 의 바 이 너 리 수 를 줄 이 고 다시 되 돌려 야 합 니 다.받 은 바 이 너 리 원본 코드 는 1111 1111 1111 1111 입 니 다.우 리 는 이미 말 했 듯 이 기호 위 치 는 1 이 고 음 치 를 나타 내 며 연산 에 참가 하지 않 는 다.그래서 이 2 진법 의 10 진법 은-32767 이다.그러나 상기 에서 c 의 원 코드 는 1111 1111 1111 1111 1111 이 고 c 가 컴퓨터 에 저장 한 패 치 도 1000 0000 00010 이다.그러나-32767 의 유래 는 또 다른 이해 가 있다.c 의 패 치 는 16 비트 이 고 32 비트 컴 파일 러 중 32 비트 의 바 이 너 리 가 있다.즉,16 비트 패 치 앞 에(32-16=16)비트 의 가상 자릿수 가 있어 컴퓨터 가 short int 에 배분 하 는 공간 에 속 하지 않 는 다 는 것 이다.그러나 이 16 비트 의 자릿수 는 정시 0 을 나타 내 고 마이너스 가 1 을 나타 낸다.그리고 16 위 권 의 숫자 는 모두 이 진 꼴찌 8 위의 숫자 와 일치 합 니 다.즉, c 의 패 치 는? 1.1000 0000 0010(1.1 은 16 개 1 을 나타 낸다)우 리 는 이렇게 계산 할 수 있다.-2 의 7 차방+2 의 1 차방=-32767.이런 이 해 는 보편적으로 대중 에 게 받 아들 여지 고 원 코드 의 개념 을 피 할 수 있다.
(8)프로그램 을 통 해 하나의 규칙 을 발견 할 수 있 습 니 다.int 의 수치 범 위 는-32768~32767 이 고 머리 꼬리 를 연결 하여 하나의 고 리 를 만 들 면 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바에서byte,byte수조와 int,long의 변환 상세 설명1. Java에서 byte와 int 사이의 변환 소스: 테스트 코드: 2. Java에서 byte 배열과 int 사이의 변환 원본: 테스트 코드: 3. Java에서 byte 배열과 long 사이의 변환 원본: 테스트 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.