详解c语言操作符(上篇)

文章目录

  • 前言
  • 一、操作符分类
  • 二,算数操作符
    • 1,整型的除法 (求得商的值,无小数)
    • 2,浮点型的除法(求得商有小数部分)
    • 3,取模操作符(得到整除之后的余数)
  • 三,移位操作符
    • 1,整数二进制 (只是0和1组成)
    • 2,正的整数二进制
    • 3,负的整数二进制原码
    • 4, 负的整数二进制反码
    • 5,负的整数二进制补码
    • 6,整数在内存中的存储形式(特别注意!!!)
    • 7,左移操作符(<<)
    • 6,右移操作符


前言

再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。不积跬步无以至千里;不积小流无以成江海。学习是一个渐进的过程,大家对于学习不要心急不要彷徨,只有当你感到有压力的时候你才会发现你在不断地进步,在本次内容中小编将会与大家详细讲解一下c语言的操作符,希望各位读者能跟着小编的脚步一步步往前走,手动敲代码。


提示:以下是本篇文章正文内容,下面案例可供参考

一、操作符分类

操作符 Value
算数操作符 +, -, * , / ,%
移位操作符 左移操作符(<<)右移操作符 (>>)
位操作符 按位与(&)按位或(
赋值操作符 = += -=
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用,函数调用和结构成员

二,算数操作符

在这里就主要讲除法/;除法分为两类:整型的除法和浮点型的除法。及取模操作符

1,整型的除法 (求得商的值,无小数)

int main()
{
	int x = 3 / 2;
	printf("%d",x);
	return 0;
}

详解c语言操作符(上篇)_第1张图片

2,浮点型的除法(求得商有小数部分)

int main() 
{
	double x = 3.0 / 2.0; 
	printf("%lf",x); 
	return 0; 
}

详解c语言操作符(上篇)_第2张图片

分析

在这里要实现小数除法必须保证除号两端必须有一个为小数,否则得到的就是整数除法的结果如下图 详解c语言操作符(上篇)_第3张图片

3,取模操作符(得到整除之后的余数)

int main()  
{
	int y = 5 % 3;  
	printf("%d",y);  
	return 0;  
}

详解c语言操作符(上篇)_第4张图片

注意:取模操作符两端必须是整数


三,移位操作符

在这里讲到移位操作符首先就要先讲一下二进制了,因为移位操作符移动的是二进制位 ,特别注意移位操作符的操作数只能是整数。

1,整数二进制 (只是0和1组成)

进制也就是就是一种表示形式
整数的二进制表示有3种
1,原码
2,补码
3,反码

2,正的整数二进制

正的整数的原码,补码,反码相同

例如7(整型占四个字节,32个bite位)的二进制为:
00000000 00000000 00000000 00000111
详解c语言操作符(上篇)_第5张图片

详解c语言操作符(上篇)_第6张图片

3,负的整数二进制原码

例如:-7(跟着-7直接写出它的值叫原码)
详解c语言操作符(上篇)_第7张图片

4, 负的整数二进制反码

负的整数二进制反码就是原码的符号位不变,其他位按位取反,也就是1变成0,0变成1。

详解c语言操作符(上篇)_第8张图片

5,负的整数二进制补码

反码的二进制位+1就是补码

详解c语言操作符(上篇)_第9张图片

6,整数在内存中的存储形式(特别注意!!!)

整数在内存中的存储的是补码!!!

7,左移操作符(<<)

左移操作符移动的是我们在整数存在内存中的补码,左移和右移操作符的操作数只能是整数

例如下方代码来讲解左移操作符:

正整数:

int main()         
{
	int a = 7;       
	//左移操作符 箭头指向哪里就往哪边移动         
	//移动的是二进制位         
	b = a << 1;         
	printf("%d",b);   
	printf("%d",a);        
	return 0;         
}

在这里a<<1表示向左移动一位

详解c语言操作符(上篇)_第10张图片

分析

详解c语言操作符(上篇)_第11张图片

在这里向左移动一位,必然会出现如图中蓝色分割线那样,左边丢了一位,右边补零;所以左移操作符的规则就是 :左边丢弃,右边补0。所以变成了00000000 00000000 00000000 00001110,而此时二进制表示1✖2的三次方+1✖2的二次方+1✖2的一次方=14。在这里a的值始终是不变的。

负整数:

int main()
{
	int a = -7;
	//左移操作符 箭头指向哪里就往哪边移动
	//移动的是二进制位
	int b = a << 1;
	printf("%d\n", b);
	printf("%d\n", a);
	return 0;
}

详解c语言操作符(上篇)_第12张图片

详解c语言操作符(上篇)_第13张图片

分析

在这里负数存储在内存中的是补码,正数也是补码,不过正数的补码就是原码,而负数不同,所以我们得到负数的补码把他转换成原码就是我们输出的值了,在这里最高位为符号位所以这里得到-14。所以左移操作符有✖2的效果。

6,右移操作符

在这里右移操作符有两种:
1,算数右移 : 右边丢弃,左边补上符号位
2,逻辑右移 : 右边丢弃,左边补上0

正数右移

int main()
{
	int a = 7;
	int b = a >> 1;
	printf("%d\n", b);
	printf("%d\n", a);
	return 0;
}

详解c语言操作符(上篇)_第14张图片

详解c语言操作符(上篇)_第15张图片
负数右移

int main()
{
	int a = -7;
	int b = a >> 1;
	printf("%d\n", b);
	printf("%d\n", a);
	return 0;
}

详解c语言操作符(上篇)_第16张图片

详解c语言操作符(上篇)_第17张图片

分析
在这里正数的算术右移和逻辑右移都是一样的,所以这里区分的就是负数的逻辑右移还是算数右移。如果你的编译器是采用右移的话,就是左边补上符号位,得到负数。如果你的编译器是采用逻辑右移的话,就是左边补上0,变成正数了。

你可能感兴趣的:(c语言)