bit课程笔记(3)

1.操作符 

①算数操作符        +,-,*,/(除,求商),%(取模,求余数)

②移(2进制)位操作符        <<  左移,>>  右移

int main()
{
int a=1;
int b=a<<1;
return 0;
}

 ③(2进制)位操作符

&        按位与

|          按位或

^        按位异或

int main()
{
int a=3;//二进制3:011
int b=5;//二进制5:101
int c=a&b;//按位与:001   打印出1
int d=a|b;//按位或:111   打印出7
int e=a^b;//按位异或:110 打印出6
return 0;
}

按位与,两个数对应的二进制位同为1才为1,否则为0.

按位或,两个数对应的二进制位只要有个1就为1,均不为1才为0.

按位异或计算规律:对应的二进制位相同为0,相异为1.

④赋值操作符        =,+=,-=,/=,&=,^=,|=,>>=,<<=

a+=3;//等价于a+a+3

⑤单目操作符

(除此之外还有双目操作符,三目操作符,例a+b,有a,b两个操作属,所以+为双目操作符)

1.  !        逻辑反操作        C语言中表示真假        0—假,非0—真,!把真变为假,把假变为真,而把0变为真固定变为1。

2.  -,+     表示正值,负值        +一般都省略

3.  &        取地址

4.  size of 操作数的类型长度

size of  计算的是变量/类型所占空间的大小,单位是字节。

int arr[]={1,2,3,4,5,6};//[ ]中不填数字,不指定大小,直接初始化,数组默认会根据后面的内容来确定元素。此处为arr[6],主义与字符串区分,没有\0.

printf("%d\n",size of(arr));//计算数组大小,单位是字节,数组有6个元素,每个元素是整型,每个整型占4个字节。

5.~        按(2进制)位取反

 

6.--前置,后置--

    ++前置,后置++

#include <stdio.h>
int main()
{ 
int a=10;
int b=a++;//后置++,先把a的值赋给b,再使a++ 
printf("a=%d,b=%d\n",a,b);//打印出a=11,b=10 
return 0; 
}
#include <stdio.h>
int main() 
{ 
int a=10; 
int b=++a;//前置++,先使a++,再把a的值赋给b
printf("a=%d,b=%d\n",a,b);//打印a=11,b=11 
return 0; 
}

前置后置--同理

7.*        间接访问操作符(解引用操作符)

8.(类型)        强制类型转换

int a=(int)3.14//强制时double类型的3.14转换为int类型

⑥关系操作符        >        >=        <        <=        !=        ==

⑦逻辑操作符        &&逻辑与        ||逻辑或

C语言中   真--非0        假--0

#include <stdio.h>
int main()
{
int a=3;
int b=5;
int c=a&&b;
printf("c=%d\n",c);//a为真,b为真,c为真,c=1
return 0;
}
#include <stdio.h>
int main()
{
int a=0;
int b=5;
int c=a&&b;
printf("c=%d\n",c);//a为假,b为真,逻辑与,c为假,c=0
return 0;
}

⑧条件操作符        exp1?exp2:exp3;        又叫三目操作符

如果表达式1为真,执行表达式2,如果表达式1为假,执行表达式3。

以找出两数中的较大值为例:

int main()
{
int a=10;
int b=20;
int max;
max=(a>b?a:b);//如果表达式1a>b为真,执行exp2,将a的值赋给max,否则,将b的值赋给max。
return 0;
}

⑨逗号表达式        exp1,exp2,exp3,...,expN        由逗号隔开的一串表达式

⑩下标引用,函数调动和结构成员            [ ]        ( )        .        ->   

int arr[4]={0};//此处的[ ]便是下标引用操作符

见 笔记(2)函数部分sum=Add(a,b);//此处的()便是函数调用操作符

2.常用关键字(不可与变量名冲突)

auto        自动

break

case

char        字符类型

const        常变量

continue

default

do

double

else

enum        枚举

extern        引入外部符号

 float        单精度浮点数

for

goto

if

int        整型

long        长整型

register        寄存器

return        返回

short        短整型

signed        有符号的

sizeof

static        静态的

struct        结构体关键字

switch        

typedef        类型定义

union        联合体/共用体

unsigned        无符号的

void                无类型

volatile

while


1.auto        自动

int main()
{
auto int a=10;//局部变量前都有auto,但局部变量都是自动变量,所以通常都省略。
return 0;
}

2.register        寄存器

int main()
{
register int a=10;//因此建议把a定义成寄存器变量
return 0
}

3.unsigned         无符号的

int main()
{
int a=-2;//int定义的变量实际上是有符号的,int实际上是signed int,但通常signed省略。
unsigned int num=-1;//unsigned int定义的变量是无符号的,无正负之分,所以都是正数。
return 0;
}

4.typedef——类型定义——类型重定义

例:typedef unsigned int u_int;//使unsigned int另命名为u_int,使接下来写代码时能直接用u_int表示unsigned int.

5.void        无类型

static        静态的

 上述代码🔺处改为        static int a=1;//a是一个静态的局部变量,最终输出a=2,a=3,a=4,a=5,a=6

代码运行过程:i=0经test函数,static int a=1后a++,a=2,但出了test函数,a没有被消除,所以a不断累加。

static①static修饰局部变量,局部变量的生命周期变长(出了作用域也没有被销毁)

        ②static修饰全局变量,改变了变量的作用域,让静态的全局变量只能在自己所在的源文件内部使用,出了源文件便无法使用。(extern声明外部符号不起作用)

        ③static修饰函数,改变了函数的链接属性(同static修饰全局变量,普通的函数具有外部链接属性,受static修饰后变为内部链接属性)。

源文件        test1.c

static int Add(int x,int y)
{
int z=x+y;
return z;
}

源文件        test2.c

#include <stdio.h>
extern int Add(int x,int y);
int main()
{
int a=10;
int b=20;
int sum=Add(a,b);
printf("sum=%d\n",sum);
return 0;
}

此时运行test2.c会报错“无法解释外部符号”,去除static即可。

3.指针

打印地址

#include <stdio.h>
int main()
{
int a=10;//申请4个字节的空间
printf("%p\n",&a);//显示0058 F734,地址是8个数字,两个数字一个字节,此处打印出的是十六进制
return 0;
}

 有一种变量用来存放地址——指针变量

int main()
{
int a=10;
int *p=&a;//自定义名称p是指针变量,int*是p的类型。此处*不与p在一起,作用是表明p是指针变量。本行代码将a的地址存到p中的目的是为了以后能找到a。
*p=20;//*解引用操作,对p进行间接访问,访问其所存地址指向的对象。
return 0;
}

本段代码中的两个*不一样,第一个*是语法形式,无实际价值,第二个*是操作符。

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的,所以为了有效地使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节,为了能够有效地访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

 指针变量的大小

指针变量是存放地址的,在32位平台上,由32根地址线组成地址编号,例1111111111111111111111001110101101,则地址有32个比特位,为4个字节。

结论:指针大小在32位平台是4个字节,在64位平台是8个字节。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值