入门C语言——初识C语言(2)

一、引言
本系列文章主要内容主要是我对C语言的初步认识以及知识小结。
本文主要大概讲一讲操作符的基本知识点。

二、GET到的知识

  • (1)算数操作符:
  • (2)移位操作符(作用于二进制位):
  • (3)位操作符:
  • (4)赋值操作符:
    • <1>反逻辑操作符(!)
    • <2>sizeof
    • <3>~
    • <4>++、--(前置,后置)
    • <5>强制类型转换
  • (5)关系操作符:
  • (6)逻辑操作符:
  • (7)条件操作符:
  • (8)逗号表达式:
  • (9)下表引用、函数调用和结构成员

操作符

(1)算数操作符:

操作符 功能
+ 加法
- 减法
* 乘法
/ 除法
% 取余数

注意:若要除法后产生小数,则除号两边至少有一个浮点数。

(2)移位操作符(作用于二进制位):

操作符 功能
<< 左移
>> 右移

下面介绍一下左移的操作方法(右移暂时不讨论,和左移有区别):

#include
int main()
{
     
	int a = 7;
	//7的二进制形式是0111,由于a的数据类型是int,占用内存为32bit,如下
	// |00000000000000000000000000000111|,那么将储存空间想象成一个格子,左移1以后,最左边的0被挤出去了,最右边会空出来一个位置。
	// 0|0000000000000000000000000000111_|,将空出来的位置用0补上,那么新的二进制数为1110,即14。
	int b = a << 1;
	printf("%d", b);
	return 0;
}

输出结果:在这里插入图片描述

(3)位操作符:

操作符 功能
& 按二进制位与
^ 按二进制位异或
| 按二进制位或

用法:

#include
int main()
{
     
    int c = 3;//二进制形式为0101
	int d = 5;//二进制形式为0111
	int e = c & d;
	int f = c ^ d;
	int g = c | d;
	//按位与(&):将两个数对应的二进制位进行对比,只要有0就记0,否则记1。
    //c:00000000000000000000000000000011
	//d:00000000000000000000000000000101
	//e:00000000000000000000000000000001  即e = 1
	printf("%d\n",e);
	//按位异或(^):将两个数的二进制位进行对比,相同记0,相异记1。
	//c:00000000000000000000000000000011
	//d:00000000000000000000000000000101
	//f:00000000000000000000000000000110  即f = 6
	printf("%d\n", f);
	//按位或(|):讲两个数的二进制位进行对比,只要有1就记1,否则记0。
	//c:00000000000000000000000000000011
	//d:00000000000000000000000000000101
	//g:00000000000000000000000000000111  即g = 7
	printf("%d\n", g);
    return 0;
}

输出结果:
入门C语言——初识C语言(2)_第1张图片

(4)赋值操作符:

操作符 功能或解释
反逻辑操作符
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
- - 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

<1>反逻辑操作符(!)

在C语言中0表示假,非0表示真,!可以将假变真,真变假。
若a = 2 ,则!a = 0;若a = 0 ,则a为真,此处规定,当假变真是,其值为1
举例

 #include
 int main()
 {
     
	int a = 2,b = 0;
	scanf("%d", &b);
	if (!a == b)
	{
     
		printf("b为0");
	}
	else
	{
     
		printf("b为非0");
	}
	return 0;
}

<2>sizeof

用来计算数据类型占用的空间(单位:字节)

#include
int main()
{
     
    int a = 3;
    printf("%d",sizeof a);//这里也可以写成 sizeof int
    return 0;
}

<3>~

首先介绍一下整数在内存中储存方式:整数在内存中储存时,储存的是二进制数。一个整数的二进制表示有3中形式(原码,补码,反码)
正整数:原码,补码,反码相同
负整数:原码,补码,反码需要计算
有符号的整数最高位是0,表示正数;最高位是1,表示负数。
内存中存储正数时,存储的是二进制补码,计算时也采用补码。
下面为操作方法:

#include
int main()
{
     
    int a = -1;
	//原码:10000000000000000000000000000001
	//反码:11111111111111111111111111111110(符号位不变,其它位按位取反)
	//补码:11111111111111111111111111111111(反码的二进制序列+1)
	int b = 0;
	//二进制序列:00000000000000000000000000000000
	//按位取反后得到:11111111111111111111111111111111(补码)  该补码就是-1的补码,因此输出结果c=-1
	int c = ~b;
	printf("%d", c);
    return 0;
}

输出如下:
在这里插入图片描述

<4>++、–(前置,后置)

以++为例(–同理)
若++在前则先++再使用,若++在后则先使用后++
具体如下:

#include
int main()
{
     
	int a = 2;
	int b = 2;
	int c = ++a;
	int d = a++;
	printf("c = %d\n", c);
	printf("a = %d\n", c);
	printf("b = %d\n", b);
	printf("d = %d\n", d);
    return 0;
}

输出如下:
入门C语言——初识C语言(2)_第2张图片
很明显计算c时,a先自身加一再赋值给c;计算d时,b先赋值给d再自身加一。

<5>强制类型转换

示例

#include
int main()
{
     
    int a = 3.14;//将3.14强制转化为整型,直接舍去小数点后的数
    printf("%d",a); 
    return 0;
}

输出如下
在这里插入图片描述

(5)关系操作符:

操作符 解释
> 大于
>= 大于等于
< 小于
<= 小于等于
!= 不等于
== 等于

(6)逻辑操作符:

<1>逻辑与(&&)
二者都为真则为真,否则为假
<2>逻辑或(||)
二者有一个为真即为真,否则为假
示例:

#include
int main()
{
     
    int a = 0,b = 0;
    scanf("%d%d",&a,&b);
    if(a==0&&b==0)
    {
     
        printf("a和b同时为零");
    }
    else if(a==0||b==0)
    {
     
        printf("a或b其中有一个值为0");
    }
    
    return 0;
}

输出如下
在这里插入图片描述
在这里插入图片描述

(7)条件操作符:

形式 exp1?exp2:exp3
解释:exp1为真吗?如果是真的那就exp2,如果是假那就exp3。
示例:

#include
int main()
{
     
    int a = 10,b = 0;
    b = ((a==5) ? 1 : -1 );
    printf("%d",b);
    return 0;
}

输出如下
在这里插入图片描述

(8)逗号表达式:

形式:exp1,exp2,exp3…expN
解释:逗号表达式使用时,从左向右依次计算,整个表达式的值取最后expN的值。
示例:

#include
int main()
{
     
    int a = 1, b = 2, c = -3;
    int d = (a = b-2,b = a + c,c = a + b,c-=3);
    printf("%d",d);
    return 0;
}

输出如下
在这里插入图片描述

(9)下表引用、函数调用和结构成员

操作符 解释
[ ] 下表引用操作符
() 函数调用操作符

另外还有 . 和 -> 两个操作符,暂时不讨论。

三、尾声
这两天的学习生活非常充实,学到了很多干货,当然本篇文章只是我对自身目前学到的知识的简单总结,很多地方都是简单一提,或多或少地可能有些错误,如果发现毛病的话欢迎评论区留言。如果你是和我一样的萌新,希望这篇文章对你有用,如果你、您是大佬,还请多多指教。

你可能感兴趣的:(新手入门,c语言)