黑马程序员_3 C语言基础-函数-进制-位运算

时间:2020-12-24 00:22:17

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

C语言基础

一 函数

 

     任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。所以,你可以说C语言程序是由函数构成的。

1.什么情况下定义函数:添加一个常用的新功能

  2.函数的定义格式

 返回值类型  函数名(形式参数列表)

 {

    函数体

 }

 

 3.定义函数的步骤

 1> 起一个有意义的函数名

1.       2>函数是干啥的,里面包含了什么代码,明确函数的参数和返回值

例如求平均值

int average(int num1, int num2)
{
return (num1 + num2)/2;
}


Return 返回值的作用;

l   void可以省略return

l   可以多次使用return

l   return后面不能有其他语句

注意:如果没有写return的类型默认为int ,写了返回值可以不返回;

 参数注意:

1.形式参数:定义函数时函数名后面中的参数,简称形参

 2.实际参数:调用函数式传入的具体数据,简称实参

 3.实参个数必须等于形参个数

 4.函数体内部不能定义和形参一样的变量

 5.如果是基本数据类型作为函数形参,纯粹是值传递,修改函数内部形参的值,并不会影响外面实参的值

 6.一个函数可以没有形参,也可以有无限多个形参

int sum(int num1, int num2)
{
return num1 + num2;
// num1 、num2称为函数的形式参数,简称实参
}
int main()
{
int a = 100;
int b = 27;

// a、b称为函数的实际参数,简称实参
int c = sum(a, b); printf("c=%d\n", c);
}


默认情况下,C语言不允许两个函数的名称一样。(即使参数不同也不行)

 

1.默认情况下,不允许有函数的名称一样

 2.函数不能嵌套定义

 3.函数不能重复定义,但是可以重复声明

 4.如果有函数的声明,没有函数的定义

 1> 编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义

 2> 链接报错,因为链接的时候会检测函数是否定义

由于程序的编写需要大量的功能,所以如果程序的所有内容都写在一个文件的话,会造成函数过多,不利于阅读、调试,尤其一个程序往往是有一个团队合作而成,不利于分工,因此需要将各个函数的声明放入单独的一个文件,就是         .h文件和.c文件的分工。 .h文件用来存放函数的声明,.c文件用来存放函数,必须文件必须同名,如果其他文件需要使用该函数的功能,只需要在程序开头写上#include “xxx.h”,如果是c函数库中的,要用<>号,比如使用print函数需导入  #include<stdio.h>

二进制

不同进制不同的使用方法

#include <stdio.h>
int main()
{
// 默认情况下,就是十进制
int number = 12;

// 二进制(0b或者0B开头) 1> 特点:只有0和1,逢2进1
int number2 = 0B1100;

// 八进制(0开头)1> 特点:0~7,逢八进一
int number3 = 014;

// 十六进制(0x或者0X开头)1> 特点:0~F,逢十六进一
int number4 = 0xc;

// %d以10进制整数的形式输出一个数值
printf("%x\n", number);

return 0;
}


Printf 以不同的进制形式进行输出

黑马程序员_3  C语言基础-函数-进制-位运算

  变量在内存中的存储

         内存由大到小寻址

         只存储二进制形式

         每个变量都有地址:第一个字节的地址就是变量的地址

         查看内存地址的两种方式:%x和%p

三 类型说明符

1.      short和long

     不同类型所占用的存储空间

黑马程序员_3  C语言基础-函数-进制-位运算

2.      signed和unsigned

1> 首先要明确的:signed int等价于signed,unsigned int等价于unsigned

2> signed和unsigned的区别就是它们的最高位是否要当做符号位,并不会像short和long那样改变数据的长度,即所占的字节数。

         signed:表示有符号,也就是说最高位要当做符号位,所以包括正数、负数和0。其实int的最高位本来就是符号位,已经包括了正负数和0了,因此signed和int是一样的,signed等价于signed int,也等价于int。signed的取值范围是-231 ~ 231 - 1

         unsigned:表示无符号,也就是说最高位并不当做符号位,所 以不包括负数。在64bit编译器环境下面,int占用4个字节(32bit),因此unsigned的取值范围是:00000000 0000 0000 0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111 1111 1111,也就是0 ~ 232 –1

 

四、         位运算

1.      &按位与

只有对应的两个二进位均为1时,结果位才为1,否则为0。

 比如

    

    10111011

    10101101

    ---------

    10101001

2.      |按位或

1>     功能

只要对应的二个二进位有一个为1时,结果位就为1,否则为0。

2>     举例: 比如9|5,其实就是1001|101=1101,因此9|5=13

3.      ^按位异或

1> 功能

当对应的二进位相异(不相同)时,结果为1,否则为0。

2> 举例: 比如9^5,其实就是1001^101=1100,因此9^5=12

3> 规律

     相同整数相^的结果是0。比如5^5=0

     多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6

     因此得出结论:a^b^a= b

4.      ~取反

按位取反 ~

    ~0000 0000 0000 0000 0000 0000 0000 1001 变成

     1111 1111 1111 1111 1111 1111 1111 0110

5   左移 << 右移 >> 相当于:9<<n-> 9 * 2的n次方8>>n -> 8/2的n次方

 ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------