C언어 비트 연산, 전처리, C++ 파일 연산

비트 연산자

의미

&

Bitwise AND: 해당하는 두 이진 비트가 모두 1이면 결과가 1이고 그렇지 않으면 0입니다.

|

Bitwise OR: 해당하는 두 이진 비트 중 하나가 1이면 결과가 1이고 그렇지 않으면 0입니다.

~

반전: ~는 0을 1로 바꾸고 1을 0으로 바꾸는 단항 연산자입니다.

^^

Bitwise XOR: 해당하는 두 이진수가 다르면 결과는 1, 그렇지 않으면 0

<<

왼쪽 이동: 이진 비트를 지정된 비트 수만큼 왼쪽으로 이동하고 상위 비트를 버리고 하위 비트를 0으로 채웁니다.

>>

오른쪽 시프트: 이진 비트를 지정된 자릿수만큼 오른쪽으로 시프트 양수일 때 상위 비트를 0으로 채우고 음수일 때 상위 비트를 0 또는 1로 채움 편집 시스템의 규정에 대해.

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  





int main()

{

int a = 25;

int b = 29;

int sum = a & b; //按位与

printf("%u \n", sum);



 sum = a | b; //按位或

printf("%u \n", sum);



sum = ~b; //按位取反

printf("%u \n", sum);



sum = a^b; //按位异或

printf("%u \n", sum);



sum = b<<2; //左移动两位

printf("%u \n", sum);



sum = b>>2; //右移动两位

printf("%u \n", sum);



return 0;

}

순환 이동: 제거된 하위 비트를 숫자의 상위 비트에 넣거나 제거된 상위 비트를 숫자의 하위 비트에 넣습니다.

원형 왼쪽 이동 프로세스는 세 단계로 나뉩니다.

  1. 먼저 x의 왼쪽 끝 n비트를 z의 하위 n비트에 넣습니다. z=x>>(32-n);
  2. x를 왼쪽으로 n비트 이동하고 오른쪽의 하위 n비트를 0으로 채웁니다. y=x<<n;
  3. y와 z에 대해 비트 OR 연산을 수행합니다. y=y|z;

원형 오른쪽 이동 프로세스는 세 단계로 나뉩니다.

  1. 먼저 x의 오른쪽 n비트를 z의 상위 n비트에 넣습니다. z=x<<(32-n);
  2. x를 오른쪽으로 n비트 이동하고 왼쪽 끝에 있는 상위 n비트에 0을 더합니다. y=x>>n;
  3. y와 z에 대해 비트 OR 연산을 수행합니다. y=y|z;

비트 세그먼트

비트 세그먼트는 특수한 구조 유형이며 모든 구성원의 길이는 이진 단위로 정의되며 구조의 구성원을 비트 세그먼트라고 합니다. 비트 세그먼트의 정의 형식:

구조체 구조 이름{

유형 변수 이름 1: 길이

.......

}

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>  





int main()

{



struct MyStruct

{

unsigned a : 1; //表示a只占用1个二进制位

unsigned b : 2; //表示b只占用2个二进制位



unsigned  : 0; //表示无名字段,代表后面的内容从这里开始存储

unsigned c : 1; //表示a只占用1个二进制位

unsigned d : 2; //表示b只占用2个二进制位

};



/*

位段类型和位段变量的定义、位段成员的引用,均与结构体类型和结构体变量相同。

位段后面的长度代表该位段占用的二进制位数

*/



//可以使各段占满一个字节,也可以不占满(一个字节8位,也就是结构体内部的各位段长度加起来的和小于8的情况)

struct MyStruct2

{

unsigned a : 1; //表示a只占用1个二进制位

unsigned b : 2; //表示b只占用2个二进制位



unsigned : 0; //表示无名字段,代表后面的内容从这里开始存储

unsigned c : 1; //表示a只占用1个二进制位

unsigned d : 2; //表示b只占用2个二进制位

};



/*

1,一个位段必须存储在一个存储单元中(通常为一个字节),不能跨两个存储单元。如果本单元不够容纳某位段,则从下一个单元开始存储该位段。

2,可以用 %d, %x, %u, %o 等格式字符,以整数形式输出位段。

3,在数值表达式中引用位段时,系统自动将位段转换为整型数。

*/





return 0;

}





전처리

매크로 정의: 소스 코드에서 문자열을 대체할 수 있는 메커니즘을 제공하는 일종의 전처리 명령입니다.

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>   



//不带参数的宏定义,宏定义不是C语句,不需要在末尾加上分号。宏定义的好处是:程序中引用该宏的地方在修改时只需要修改一处即可。

#define PI 3.14  

//带参数的宏定义: 不但要替换字符串,还要替换参数

#define tax(a,b) (a+b)  





int main()

{

printf("%d ,",PI);  //把PI替换为3.14

printf("%d",tax(4,6)); //把ax(4,6) ,替换为(4+6)

return 0;

}







#include命令:用于将其他源文件的内容包含进来,也就是将其他文件包含到本文件中。



#include<stdio.h>   

#include "stdio.h"

위와 같이 <> 기호를 사용하는 것과 ""를 사용하는 것의 차이점은 다음과 같습니다.

1. <>를 표준 방법으로 사용하면 시스템이 C 라이브러리 함수 헤더 파일이 저장된 디렉토리에 포함될 파일을 직접 검색합니다.

2. 포함하려면 ""를 사용하십시오. 먼저 사용자의 현재 디렉토리에 포함할 파일을 검색합니다. 찾을 수 없으면 C 라이브러리 함수 헤더가 있는 디렉토리에 포함할 헤더 파일을 검색합니다. 파일이 저장됩니다.

헤더 파일의 헤더에 자주 사용되는 포함된 파일을 헤더 파일 또는 헤더 파일이라고 하며 일반적으로 접미사 .h가 붙습니다. 일반적으로 헤더 파일에 포함되는 내용에는 매크로 정의, 구조, 합집합, 열거형 선언, typedef 선언, 외부 함수 선언 및 전역 변수 선언이 포함됩니다.

헤더 파일 포함에 대해 몇 가지 유의해야 할 사항이 있습니다.

  1. #include 명령은 포함된 파일을 하나만 지정할 수 있습니다.
  2. 파일 포함은 중첩될 수 있습니다. 즉, 포함된 파일은 다른 포함된 파일도 포함할 수 있습니다.
  3. 헤더 파일 ah가 ac에 포함되어 있으면 프리컴파일 후 두 파일이 하나의 파일이 됩니다. ah에 전역 정적 변수가 있으면 ac 파일에서도 전역 변수가 유효하므로 extern으로 선언할 필요가 없습니다.

조건부 컴파일

기본적으로 소스 프로그램의 모든 라인이 컴파일되는데, 특정 조건이 충족될 때만 일부 내용을 컴파일하게 하려면 조건부 컴파일 명령을 사용해야 합니다.

조건부 컴파일을 사용하면 정식 버전 프로그램과 디버그 버전 프로그램을 잘 처리할 수 있으며 프로그램의 이식성도 향상됩니다.

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>   

#define NUM 55



//#if语句:如果if语句后面的表达式为真,则编译 #if 与 #endif 之间的程序段。

#if NUM>50

//这里书写代码

#endif 



//#if #else  语句: 使用类似于常规代码的 if else

#if  NUM==50

//满足条件执行这里

#else

//不满足条件执行这里

#endif





//if  #elif语句 : 多条件语句,类似于if  else if

#if NUM<55

//条件1满足执行这里

#elif  NUM>52

//条件2满足执行这里

#endif





//#ifdef 语句:如果后面跟着的宏已经被定义,则编译后面的程序,如果后面跟着的宏未被定义,则不编译后面的程序,

#ifdef NUM

//如果宏NUM已经被定义,则不编译这里面的程序

#endif 





//#ifdef #else 语句:如果后面跟着的宏已经被定义,则编译后面的程序,如果后面跟着的宏未被定义,则编译#else后面的程序,

#ifdef NUM

//如果宏NUM已经被定义,则不编译这里面的程序

#else

//如果宏NUM已经被定义,则编译这里面的程序

#endif 





//#ifndef 语句:如果后面跟着的宏未被定义,则编译后面的程序,如果后面跟着的宏已经定义,则不编译后面的程序,

#ifndef NUM

//如果宏NUM未被定义,则编译这里面的程序

#endif 





//#ifndef #else 语句:如果后面跟着的宏未被定义,则编译后面的程序,如果后面跟着的宏已经定义,则编译#else后面的程序,

#ifndef NUM

//如果宏NUM未被定义,则编译这里面的程序

#else

//如果宏NUM已经已经定义,则编译这里面的程序

#endif 





// #undef命令 : 删除事先定义好的宏定义,相当于是限制了宏PI的使用范围,即只在#define 与 #undef之间。

#define PI 3.14

//PI只在这里面有效

#undef PI







int main()

{

// #line命令: 用于显示_LINE_ 与 _FILE_ 的内容。 _LINE_用于显示当前编译行的行号  , _FILE_用于存放当前编译的文件名。常用于调试环境中。

printf("当前行号: %d \n", __LINE__);

printf("当前文件名称: %s \n", __FILE__);







//#pragma 命令 : 用于设定编译器状态或指示编译器完成一些特定的动作。格式为://#pragma 参数,参数主要有以下三个:

#pragma message  //在编译信息窗口中输出的相应信息

#pragma code_seg //设置程序中函数代码存放的代码段

#pragma once     //保证头文件被编译一次



/*

标准的预定义宏名有以下几个:

_LINE_  :当前被编译代码的行号

_FILE_  :当前源程序的文件名称

_DATE_  :当前源程序的创建日期

_TIME_  :当前源程序的创建时间

_STDC_  :判断当前编译器是否为标准C,若是标准C则其值为1,否则不是标准C编译器

*/

return 0;

}

문서

파일은 파일 이름이라는 이름을 가진 관련 데이터의 정렬된 모음입니다.

C언어에서 연산파일의 종류는 구조체 FILE이고 연산파일의 방식은 FILE *이다.

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>   

int main()

{

FILE* fp = fopen("a.txt", "r"); //使用指针的方式打开一个文件,且是只读模式

return 0;

}

파일 사용

의미

아르 자형

텍스트 파일을 읽기 전용으로 작동

텍스트 파일을 쓰기 전용으로 작동

텍스트 파일 끝에 추가

rb

바이너리 파일을 읽기 전용으로 작동

wb

바이너리 파일에서 쓰기 전용으로 작동

ab

바이너리 파일 끝에 추가

r+

텍스트 파일 읽기 및 쓰기 조작

w+

텍스트 파일 읽기 및 쓰기 조작

+

텍스트 파일을 조작하여 읽고 쓰거나 파일 끝에 추가

rb+

바이너리 파일 읽기 및 쓰기

wb+

바이너리 파일 읽기 및 쓰기

ab+

이진 파일을 읽고 쓰거나 파일 끝에 추가하는 작업

#define  _CRT_SECURE_NO_WARNINGS

#include<stdio.h>   



int main()

{

//使用指针的方式打开一个文件,且是只读模式,若打开文件失败则返回NULL

FILE* fp = fopen("G:\VS\CDemo\CDemo\c.txt", "a");





char C ='A';

//fputc函数用于向文件中写入一个字符串

fputc(C, fp);



int i = 12;

//fprintf将变量i格式写入到文件中去

fprintf(fp, "%d", i);



//读取fp执行的文件中的i的值

fscanf(fp, "%d", &i);



char a[100];//数据存储块

//fread代表以某种规则来读取数据块

fread(a, 20, 5, fp);  //参数a代表存储数据的块,20代表每次读取的数量,5代表读取的次数,fp是文件指针



//fwrite代表以某种规则写入文件,参数a代表存储数据的块,20代表每次要写的数量,5代表写的次数,fp是文件指针

fwrite(a, 20, 5, fp);



//移动文件内部的位置指针,fp代表要移动的指针,200代表偏移量,0代表起始位置

fseek(fp, 200, 0);



//将位置指针重返文件开头

rewind(fp);



//得到流式文件中的当前位置

ftell(fp);



//文件使用完毕后,关闭文件,关闭成功返回0,否则返回EOF

fclose(fp);



return 0;

}

추천

출처blog.csdn.net/XiaoWang_csdn/article/details/131019352