操作符

1. 算数操作符

加 减 乘 除 模
%两个操作数必须为整数
/ 两个操作数均为整数整数除法 一个为小数就是小数操作符

2. 移位操作符 <<、 >>

<<左移

移位为二进制位
移位运算符,不要移动负数位(a>>-3 不可)
左边丢弃右边补0即可

#include<stdio.h>
int main()
{

	int a = 13;
	int b = a << 1;
	printf("%d\n", a);
	printf("%d\n", b);

	return 0;
}

在这里插入图片描述

每一位均变为原来的二倍
a << 1 但a本身不会改变
如何让a 变呢

#include<stdio.h>
int main()
{
   int a = 13;
	a = a << 1;
	printf("%d\n", a);
    return 0;
}

此时a 就会改变

右移> >

  • 算术右移
    编译器使用的是算数右移
    右边丢弃,左边补原符号位

//int a = -1;
//10000000000000000000000000000001原码
11111111111111111111111111111110反码
11111111111111111111111111111111补码=反码+1

#include<stdio.h>
int main()
{
	int a = -1;
	int b = a >> 1;
	printf("%d\n", a);
	printf("%d\n", b);

	return 0;
}

在这里插入图片描述

  • 逻辑右移
    右边丢弃左边补0
    一般不用

3.位操作符

& | ^

& 按位与 相同为本身不同为0注意负数用补码与

| 按位或 均为0才为0

^ 按位异或 相同为0 相异为1

详细运用和例题参见另一篇博客

4.赋值操作符:可以连续赋值

复合赋值符
+= -= 等等

5.单目操作符

! - + & sizeof ~ – ++ * (类型)

  • size of

单位是字节
它不是函数(下面的例子说明)
1.sizeof //有的时候()可以去掉例如sizeof a) 但只有是符号的时候才行
不能写出sizeof int)

以下程序可以实现

#include<stdio.h>
int main()
{
	int a = 3;
	printf("%d\n", sizeof a);
	printf("%d\n", sizeof(int));

2.一个表达式放在函数参数部分的时候会参与计算,而sizeof ()里面的表达式不会参与计算

#include<stdio.h>
int main() 
{
	short s = 3;
	int a = 5;
	printf("%d\n", sizeof(s = a + 5));//2
	printf("%d\n", s);//3
	return 0;
}

在这里插入图片描述
具体解释
test.c === === test.exe
转换之间
需要编译+链接
编译的时候2已经算出来了
但是s=a+5是在程序运行的时候才计算
//即为产生了exe之后运行才计算的15

但是编译的时候已经处理掉了
那个时候不放 sizeof(s = a + 5)
而只放了2
sizeof 处理时机远远早于计算时间
就是这个意思啦!

关于 ++ 、 - -

前置先操作后使用
后置先使用后操作

6.关系操作符

比较大小的

、>=、 <、 <= 、==、!=(不等于) ===《c陷阱和缺陷》
但注意字符串比较大小strcmp

7.逻辑操作符

&&(逻辑与)、||(逻辑或)
注意区分逻辑与和按位与

8.条件操作符

exp1?exp2:exp3
//1 也可以a>5? b=3:b=-3;
b=a>5?3:-3;
max=a>b?a:b;
逗号表达式,
会从左向右算,整个表达式的结果是最后一个表达式的结果

9.下标引用、函数调用和结构体成员

下标引用
arr[4]=5
//4[arr]=5
两个都可以说明[]是操作符 arr 和4是操作数 典型的数组的下标引用

结构体成员
结构体存放是相同或不同的数据的集合
结构体的本质是变量类型 ,因此也要定义变量
struct stedent
{
char name[20];
int age;
char sex[5];
}; //定义结构体类型,这个类型里面包含了很多的类型

struct student s 和int a
struct student 就相当于int
s 就是变量名 和a 一样
关于.和->
结构体变量访问它的成员用.
结构体指针用->

#include<stdio.h>
#include<string.h>
struct student
{
	char name[20];
	int age;
	char sex[5];
};    //就像是int float 是一个类型

int main()
{
	//结构体很重要
	
	//结构体指针用->
	struct student s = { "lisi","23","男" };//类似数组所以像数组的初始化方式
	struct student* ps = &s;
	//printf("%s\n",(*ps).name)与下面的语句是一个意思
	printf("%s\n", ps->name);//->也是一个操作符

	//char* p = "abcdef";//实际上是把a的地址给了指针
	//错的

	//结构体变量访问它的成员用.
	//struct student s;
	//s.name = "zhangsan"; 字符串
	//s.age = "20";

     //对的
	struct student  s;
	strcpy(s.name, "zhangsan");
	strcpy(s.sex, "男");
	s.age = 20;
	printf("%s %d %s\n", s.name, s.age, s.sex);
	return 0}

详解参见另一个博客

别人的笔记
整理一下
写的确实挺详细的

一个关于strcpy
使用头文件#include<string.h>中的strcpy()和strcat()函数时出现了一个错误:error C4996: ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead.是因为strcpy()和strcat()函数不安全造成的溢出。

看别人的博客是说要按照以下操作才可以。

【项目属性】,点击【C++】里的【预处理器】,对【预处理器】进行编辑,在里面加入一段代码:_CRT_SECURE_NO_WARNINGS。

虽然我也不太懂为什么,但是确实是解决掉了

stycpy一般不用了,目前推荐的是memcpy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值