C 언어 표현

쉼표로 표현

逗号表达式:就是用逗号隔开的多个表达式,从左向右依次执行
exp1,exp2,wxp3,......wxpn

참고 : 전체 표현식의 결과는 마지막 식의 결과입니다.

void test()
{
	int a = 1;
	int b = 2;
	int c = (a > b, a = b + 10, b = a + 1);
	//可知最后一个表达式的结果,就是整个表达式的结果。
	//那么从左到右依次计算就会得到c = 13;
	
}

다음 표 참조, 함수 호출 및 구조체 멤버

1] 오퍼레이터는 테이블 참조 나누기

操作数 : 一个数组名 + 以后索引值
int arr[10];
arr[9] = 10;
[ ]:有两个操作数一个是arr,另外一个就是9.
注意:下表引用常用与数组的遍历修改

2. () 함수 호출 연산자

操作数 : 一个函数名 + [若干传递给函数的参数] 
#include<stdio.h>
void test()
{
	printf("hehe\n");
}

void test2(const char* str)
{
	printf("%s\n",str);
}

int main()
{
	test();
	test2("hello worl");
	return 0;
}

3. 구조 부재를 액세스하려면

. :结构体.成员名
-> :结构体指针->成员名

#include<stdio.h>
struct stu{
	char name[20];
	int age;
};
void test(struct stu stu)
{
	stu.age = 18;
}

void test2(struct stu * pstu)
{
	pstu->age = 18;
}

itn main()
{
	struct stu stu;
	struct stu* pstu = &stu;
	
	stu.age = 10;
	test(stu);
	
	pstu->age = 20;
	test2(pstu);
	return 0;
}

식 평가

식을 평가하기 위해 알려진, 연산자 우선 순위와 의사 결정의 부분이 있지만, 캐스트 계산하기 전에 수행 할 작업을 요구하는 과정에서 일부가있다.
암시 적 형식 변환 :
암시 적 변환 수단에 대한 명확한 설명의 부재에서 발생하는 정보 (C 언어 스타일의 캐스트 명확하게 설명했다 우리의 프로그래머의 일부입니다), 컴파일러는 자동으로 우리가 수행하는 데 도움이 캐스트. 우리가 그냥 여기있어,에 대해 걱정할 필요가 없습니다 데이터 계산, 비교 및 할당 일반적으로 동일한 유형의 데이터 계산, 비교 및 할당의 다른 유형을 설명하고, 프로그래머가 캐스팅 때 우리가하지 않았다 컴파일러를 지정하는 방법입니다 우리는 치료의 유형 간의 도움 변환 만 우리는 우리가 언제 어디서 프로그래밍을 방지하는 방법 알려주의를 기울여야한다, 과정을 알고있다.

(1)는 INT 타입 암시 형식 변환보다 작다 : 정수 리프트 (정수 판촉).

C 언어 연산을 형성하는 것은 항상이 정확도를 얻기 위해, 성형 정밀도의 디폴트 문자 및 단락 정수 연산 식을 사용하기 전에 일반 정수로 변환이 변환이라고합니다 통합 추진

(2) 왜 통합 추진 (정수 추진)?

우리는 식 성형 작업은 CPU의 대응하는 구동 장치에 완료 될 것을 알고,이 기간 우리는 또한 성형기 오퍼레이터라는 논리 유닛 (ALU)는 상기 ALU 오퍼랜드 길이 바이트 길이 (32) INT이다 비트 범용 CPU 레지스터의 길이도이다. 우리가 원하는 그렇다면 이번에는 CPU는 32 비트 표준 척추 길이가 실행되는 동안, 문자의 두 종류를 추가하여 계산 만 8 CHAR는 패킷이 먼저 계산되어야하는 경우는 그 다음 문자 (32)가된다 ALU는 연산에 등록한다. 따라서, 상기 식을 계산하기 위해, INT INT 또는 부호로 변환 할 것이다 INT 타입보다 작다. 이 변환 과정은 업그레이드 형성 유무의 의미를 향상시키기 위해 형성된다 ;;;;

성형을 향상시키는 방법 (3)

부호 비트 데이터에 따라 쉐이핑 올라가는 변수 타입을 향상시키기

//负数的提升
char c1 = -1;变量c1的二进制位(补码)中只有8个
比特位:11111111
因为char为有符号的char,所以整形提升时,高位补
符号位,
提升之后:11111111111111111111111111111111


//正数的整形提升
char c2 = 1;变量c1的二进制位(补码)中只有8个
比特位:00000001
因为char为有符号的char,所以整形提升时,高位补
符号位,
提升之后:00000000000000000000000000000001

//无符号整形提升,,/*高位补0*/就OK了


//栗子
void test()
{
	char c = 1;
	printf("%u\n", sizeof(c));//输出1
	printf("%u\n", sizeof(+c));//输出4
	printf("%u\n", sizeof(!c));//输出1
}
//只要c参加表达式运算就会发生整形提升,所以+c就会发送提升,所以输出4,而其他没有发生表达式运算
(4) 할당시 암시 형식 변환

계산 공식 위에서 언급뿐만 아니라 특별한주의 기간 동안 묵시적 타입 변환은 할당입니다입니다 , 올바른 데이터 유형 할당 연산자는 수의 할당 유형의 왼쪽으로 변환해야하는 경우 올바른 길이의 데이터 유형 왼쪽보다 큰 경우, 절단 또는 반올림을해야합니다.

char ch;
int i,result;
float f;
double d;
result = ch/i + (f*d-i);

(1)首先计算 ch/i,ch → int型,ch/i → int型。

(2)接着计算 f*d-i,由于最长型为double型,故f→double型,i→double型,f*d-i→double型。

(3)(ch/i)(f*d-i)进行加运算,由于f*d-i为double型,故ch/i→double型,ch/i+(f*d-i)double型。

(4)由于result为int型,故ch/i+(f*d-i)doubleint,即进行截断与舍入,最后取值为整型
게시 41 개 원래 기사 · 원의 찬양 (15) · 전망 8841

추천

출처blog.csdn.net/baidu_41844500/article/details/104716881