C语言_day1

目录

计算机存储单位

计算机的数据表示形式

数值型数据

常用的进制转换

十进制转二进制

二转十

八转十

十转八

二转八

十六转二

二转十六

非数值型数据

词法符号

关键字(背过)

标识符

运算符

算术运算符

逻辑运算符

位运算

&按位与

|按位或

~取反   单目运算符

关系运算符

赋值运算符

计算机存储单位

  在计算机内部,信息都是釆用二进制的形式进行存储、运算、处理和传输的。

基本储存单元位(bit) 和 字节(byte)

1字节=8位

1B=8bit

1KB=1024B 2的10次方     10月24日

1MB=1024KB

1GB=1024MB

1TB=1024GB

 注意:bit是计算机最小存储单位,bit只能存储0和1。

计算机的数据表示形式

数值型数据

二进制八进制十进制十六进制
计算方式逢2进逢8进逢10进逢16进
元素0 10~70~90~9 a~f

常用的进制转换

十进制转二进制

1.短除法  除2倒取余

2.拆分法   拆分成2的次方和    8421

3.程序员计算器

二转十

2的次方和,从右向左依次增加

如:101100=32+8+4=44

八转十

1.一位八进制用三位二进制表示,以数字0开头。 (注意从右往左)

031=011 001

0765=111 110 101

十转八

1.先转二再转八

例如:165 =>   10100101 => 010 100 101 => 245

2.短除法 (短除法也适用于是转八的情况)

例如:165转成八进制:

结果为:245

解析:

二转八

从右向左,最后不足三位的高位补零

11 001 011=0313

十六转二

一位十六进制用四位二进制表示,以0x开头

十六进制表示

a

b

c

d

e

f

对应数字

10

11

12

13

14

15

0x3ce=0011 1100 1110

二转十六

二进制四位对应十六进制

非数值型数据

ascii码:计算机中的字符都有一个序号,计算机根据这个序号唯一确定相应的字符,计算机中存储的字符都是以ascii码序号对应的二进制存储的。

常用ascii码

字符'\0' '\n''0' ‘A’'a'
作用字符串结束标志换行符字符数字0大写字母A小写字母a
对应ascii码010486597

转换关系:

  字符'2' - 48 = 数字2

  'A'+32='a'

练习:

答案:g

词法符号

        关键字、运算符、标识符、分隔符、标点符号

关键字(背过)

系统预定义的具有特殊功能的词法符号

分类:

存储类型:auto自动 static静态  extern外部引用  register(寄存器)

数据类型:int char       short      long        float       double signed     unsigned

构造数据类型:struct union    enum

选择结构:if else switch case       default

循环结构:for while   do goto    break  continue

其他:void typedef重定义 const常量化 sizeof  volatile防止编译器优化 return

补充*(了解):

存储区:

栈区:局部变量 由系统自动开辟空间、自动回收。

堆区:由程序员手动开辟空间malloc函数、回收free函数。

全局区/静态区:.bss .data 全局变量(全局区) static修饰的变量(静态区)。

常量区: char *p="hello";。

标识符

  变量名、宏名、函数名、重定义名的规范

命名规则: 

  1. 由数字、字母、下划线组成
  2. 开头不能是数字
  3. 不能和关键字重复
  4. 见名知意  

驼峰命名法:  niceDay 小驼峰命名法   NiceDay  大驼峰命名法。(为了增强代码的可读性)

练习:

以下自定义变量名哪些不合法:

x    y    sum   a100   _A7b_3x   3’a   x*y   @   b.8  while

运算符

  算术运算符 逻辑运算符 位运算符 关系运算符 赋值运算符 三目运算符

  当数字作为判断条件时,0为假,非0为真

补充*()了解:交换两数数值的方法:

1.定义第三变量交换法

2.加法交换法:

如;

int a=6,b=8;

a=a+b;

b=a-b;

a=a-b;

3.位运算法;

如:

int a=6,b=8;

a=a^b;

b=a^b;

a=a^b;

注意:位运算法可以用于所有数据类型的值交换,优点是节省内存空间节省系统资源。

算术运算符

+ - * / % ++ --

/整数相除,向下取整

int a=5/2;		//a=2
float a=5/2;    //a=2.000000
float a=5/2.0;	//a=2.500000
float a=(float)5/2;	//(float)5--->强制转换,把整型5强转成浮点型,只在当前这一行生效

%只能用于整数运算

如:10%3=1

练习:

   把1234的个十百千位分别输出到终端。

答案:

笔试真题:

答案:

b

单目运算符:++ --;

a++----->a=a+1  (a++相当于a=a+1)

独立成句:

int  a=2;
a++;	
printf("%d\n",a);	//3
int  a=2;
++a;
printf("%d\n",a);	//3

在赋值运算中:

int a=2;
int b=++a;       	//先+  后=
printf("%d %d\n",a,b);	//a=3,b=3
int a=2;
int b=a++;	//先= 后+
printf("%d %d\n",a,b);	//a=3,b=2

打印语句:

int a=2;

1)printf("%d\n",a++); //2

2)printf("%d\n",++a); //3

练习:

1. 以下程序输出结果是
#include <stdio.h>
int main(int argc, char *argv[])
{
    int a = 10;
    int b = a++;            //a=11,b=10
    int c = a + b;            //c=21
    int d = (b++) +c;        //d=10+21=31 b=11
    printf("%d = \n",d);
    return 0;
} 
/*[单选题]         
A. d = 31
B. d = 32
C. d = 33
D. d = 34  */

答案:

9

逻辑运算符

&& || !

&&逻辑与:全真则真,一假则假

||逻辑或:一真则真,全假则假

!逻辑非:非真即假,非假则真    0假   1真

printf("%d\n",3>2&&5<9);	
printf("%d\n",3>2||5<9||8>99);
printf("%d\n",5<9 && !(8>99));

截断法则

逻辑或运算中:如果前边的表达式为真,则后边的表达式不再执行,返回真

逻辑与运算中:如果前边的表达式为假,则后边的表达式不再执行,返回假

c语言笔试真题练习:

1.

#include <stdio.h>
int main()
{
	int a=5,b=6,c=7,d=8,m=2,n=2;
	(m=a<b)||(n=c>d);
	printf("%d  %d",m,n);     
}

答案:1    2

2.

1. #include <stdio.h>
int main(int argc, char *argv[])
{
   int a = 10;
   int b = a--;                 //b=10  a=9
   int c = a + b + 2;           //c=10+9+2=21
   int d = (b--) + (++c);       //d=10+22=32
   printf("%d\n",d);       
} 
/*[单选题] 
   A. d = 31
   B. d = 32
   C. d = 33
   D. d = 34 */

答案:B

3.

4.

5.

位运算

注意,位运算都是补码之间的运算运算结果转为原码即为所得结果的十进制表达形式

& | ^ ~ << >>  二进制  0  1

&位与:全1则1,有0则0

|位或:有1则1,全0则0

^异或:不同为1,相同为0

~取反:0-->1 1-->0

整数在内存中存储的形式是补码的二进制

整数的三种二进制表示:

原码

反码

补码

正数

本身

本身

本身

负数

本身

除符号位,其他位按位取反

反码+1

举例:

int   a=3  int类型占4字节,1字节=8位,符号位0---正数 1---负数

原码: 0000 0000 0000 0000 0000 0000 0000 0011

反码: 0000 0000 0000 0000 0000 0000 0000 0011

补码: 0000 0000 0000 0000 0000 0000 0000 0011

int  a=-3

原码: 1000 0000 0000 0000 0000 0000 0000 0011

反码: 1111 1111 1111 1111 1111 1111 1111 1100

补码: 1111 1111 1111 1111 1111 1111 1111 1101

&按位与

int a=3,b=5;

    int c=a&b;

    //a: 11

    //b:101

    //c:001

    printf("%d\n",c);//1

/****************************************************************************

int a=3,b=-5;

int c=a&b;

//a: 11

printf("%d\n",c);//3

3:

补码:0000 0000 0000 0000 0000 0000 0000 0011

-5:

原码:1000 0000 0000 0000 0000 0000 0000 0101

反码:1111 1111 1111 1111 1111 1111 1111 1010

补码:1111 1111 1111 1111 1111 1111 1111 1011

补码:0000 0000 0000 0000 0000 0000 0000 0011

3&-5

&:  0000 0000 0000 0000 0000 0000 0000 0011

结果为:3

|按位

 //运算举例

12 | -10 

12补码:

0000 0000 0000 0000 0000 0000 0000 1100

-10补码:

1111 1111 1111 1111 1111 1111 1111 0110

12补码 | -10补码:

0000 0000 0000 0000 0000 0000 0000 1100

1111 1111  1111  1111  1111 1111 1111 0110

补码计算结果:

1111 1111 1111 1111 1111 1111 1111 1110    

反码:

1111 1111 1111 1111 1111 1111 1111 1101

原码:

1000 0000 0000 0000 0000 0000 0000 0010---->   -2

c语言笔试真题练习:

~取反   单目运算符

int a=3;

int c=~a;

//a: 11

printf("%d\n",c);

3的补码:

0000 0000 0000 0000 0000 0000 0000 0011

~取反,得到补码:

1111 1111 1111 1111 1111 1111 1111 1100

反码:

1111 1111 1111 1111 1111 1111 1111 1011

原码:

1000 0000 0000 0000 0000 0000 0000 0100==-4

<<左移

左移几位,右边补几个0

例如:

8<<2=32 公式:8*2^2=32

-5<<3=-4 -5*2^3=-40

>>右移

右移几位,左边用0补充,右边丢弃       

例如:

8>>2=2 8/2^2=2

-48>>4= 3 -48/2^4=-3

练习:

1.设int b=2;表达式 (b>>2)/(b>>1)的值是()                                   

A.0       B.2     C.4     D.8

2.变量x和y的值相等,且为非零值,则以下选项中,结果为0的表达式是()

A.x||y       B.x|y    C.x&y     D.x^y                                

3.以下程序升输出结果是()。

int main()

{

char x=040;//040-->100000

printf("%o\n",x<<1); //1 000 000

return 0;

}

A.100       B.80   C.64     D.32

答案: A D A

置一公式:a|(1<<n) 10010--->10110

置零公式:a&(~(1<<n)) 10010--->10000

对应位取反操作:a^(1<<b)     

关系运算符

   > < >= <= == !=

  禁止1<x<5 x>1&&x<5

  =赋值  ==等于  

赋值运算符

  = += -= *= /= %=

  a-=5; == a=a-5;

练习:

答案:60

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值