정형 승급 에 대하 여 (1)
7399 단어 C-Language
정형 향상 의 의미: 표현 식 의 정형 연산 은 CPU 의 해당 연산 장치 에서 실 행 됩 니 다. CPU 내 정형 연산 기 (ALU) 의 조작 수의 바이트 길 이 는 일반적으로 int 의 바이트 길이 이 며 CPU 의 유 니 버 설 레지스터 길이 이기 도 합 니 다.따라서 두 개의 char 유형 을 더 하 더 라 도 CPU 가 실 행 될 때 실제 적 으로 CPU 내 정형 조작 수의 표준 길이 로 전환 해 야 한다.유 니 버 설 CPU (geneal - purpose CPU) 는 8 비트 바이트 두 개 를 직접 추가 연산 하기 어렵다.따라서 표현 식 의 각종 길 이 는 int 길이 의 정형 값 보다 작 을 수 있 습 니 다. 모두 int 또는 unsigned int 로 변환 한 다음 에 CPU 에 보 내 연산 을 수행 해 야 합 니 다.
상기 성형 향상 의 개념 과 의 미 는 모두 인터넷 에서 발췌 한 것 이지 본인 이 창작 한 것 이 아니다.
1. 음수 의 성형 승급: char c1 = - 1;변수 c1 의 바 이 너 리 비트 (패 치) 중 8 개의 비트 비트 비트 비트 만 있 습 니 다. 1111111 char 는 기호 가 있 는 char 이기 때문에 성형 이 향상 되 었 을 때 높 은 비트 는 기호 위 치 를 보충 합 니 다. 즉, 1 이 향상 되 었 을 때 결 과 는 11111111111111111111111111111111111111111111111111111 입 니 다.
2. 양수 의 성형 향상: char c2 = 1;변수 c2 의 바 이 너 리 비트 (패 치) 에는 8 개의 비트 비트 비트 만 있 습 니 다. 0000001 char 는 기호 가 있 는 char 이기 때문에 성형 이 향상 되 었 을 때 높 은 비트 는 기호 위 치 를 보충 합 니 다. 즉, 0 으로 향상 되 었 을 때 결 과 는 000000000000000000000000000000000000000 00001 입 니 다.
3. 부호 없 는 성형 승급, 고위 보 정 0
예 (1): char a = 3;char b=127; char c =a+b;얼마나 출력 해 야 하나 요?3 의 패 치: 000000000 000000000 00000011 8 비트 낮 추기: 00000011
127 의 패 치: 00000000 00000000 011111111 8 비트 낮 추기: 011111111
c=a+b;(추가 시 성형 으로 승급) 3 성형 후: 0000000000000000000000000000000000000000000000000000000000000111 (고위 보충 기호 위치, 0) 127 성형 을 승급 후: 00000000000000000000000000000000000011111 (고위 보충 기호 위치, 0) 을 더 한 후: 00000000000000000000000000000000000000000000000000000000000000000000000000000000010 8 위: 1000010
C 성형 향상: 11111111 11111111 1000010 (고위 보충 기호 위치, 1) C 의 원 코드: 10000000 00000000 01111110 인쇄 결과 (- 126)
예 (2):
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{
char a = 0xb6;
short b = 0xb600;
int c = 0xb6000000;
if(a==0xb6)
printf("a");
if(b==0xb600)
printf("b");
if(c==0xb6000000)
printf("c");
system("pause");
return 0;
}
a, b 는 성형 향상 을 해 야 하지만 c 는 성형 향상 a 가 필요 하지 않 습 니 다. b 성형 이 향상 되면 마이너스 가 됩 니 다. 그래서 표현 식 a0xb 6, b0xb 600 의 결 과 는 가짜 입 니 다. 그러나 c 는 성형 향상 이 일어나 지 않 으 면 표현 식 c = = 0xb 6000000 의 결과 가 진실 입 니 다. 그래서 프로그램 출력 결 과 는 c 입 니 다.
예 (3):
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{
char c = 1;
printf("%u
", sizeof(c));
printf("%u
", sizeof(+c));
printf("%u
", sizeof(!c));
system("pause");
return 0;
}
, c 표현 식 연산 에 참여 하면 성형 향상 이 발생 합 니 다. 표현 식 + c 는 향상 이 발생 하기 때문에 size of (+ c) 는 4 개의 바이트 입 니 다. 표현 식 - c 도 성형 향상 이 발생 하기 때문에 size of (- c) 는 4 개의 바이트 이지 만 size of© ,바로 한 바이트 입 니 다.