C语言入门篇--充分理解操作符

目录
  • 1.算术操作符
    • 1.1除法运算
    • 1.2取模运算
  • 2.移位操作符
    • 相关知识
      • 1.移位运算是站在二进制角度移位的
      • 2.左移右移,原始变量值不发生变化除非给原始变量赋值
      • 3.整数移位运算不能整除时,只保留整数部分
      • 4.C语言中的移位运算符
      • 5.移位分为算术移左移、算术移右移和逻辑左移、逻辑右移
  • 3.位操作符
    • 3.1按位与&
    • 3.2按位或 |
    • 3.3异或 ^
  • 4.赋值操作符
  • 5.单目操作符
    • 5.1 逻辑反操作 !
    • 5.2 负值 - 正值 +
    • 5.3 取地址 &
    • 5.4 取反 ~
    • 5.5 前置、后置 ++ - -
    • 5.6 解引用操作符 *
    • 5.7 强制类型转换 (类型)
  • 6.关系操作符
  • 7.逻辑操作符
  • 8.条件操作符
  • 9.逗号表达式
  • 10.下标引用、函数调用和结构成员

1.算术操作符

+ 加
- 减
* 乘
/ 除
% 取模

1.1除法运算

除法运算分母不可为零,否则程序会中断报错,所以要在程序中检验分母是否为零。

1.2取模运算

取模即取余数。

2.移位操作符

相关知识

>> 右移
<< 左移

1.移位运算是站在二进制角度移位的

eg:

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

2.左移右移,原始变量值不发生变化除非给原始变量赋值

3.整数移位运算不能整除时,只保留整数部分

4.C语言中的移位运算符

(如<<>>)只能用于整型(如intshortlongchar等),不能用于浮点型(如doublefloat

5.移位分为算术移左移、算术移右移和逻辑左移、逻辑右移

算术左移和算术右移主要用来进行有符号数的倍增、减半;

逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半。

3.位操作符

位操作是站在二进制角度进行操作的。

& 按位与
| 按位或
^ 按位异或

3.1按位与&

eg:

参与按位与的两二进制位数都为真(1)结果为真,否则只要有一个为假(0)结果为假。

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

3.2按位或 |

参与按位与的两二进制位数只要有一个为真(1)结果为真,若都为假(0)结果为假。

eg:

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

3.3异或 ^

参与按位与的两二进制位数相同为假,不同为真。

eg:

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

4.赋值操作符

=  +=  -=  *=  /=  &=  ^=  |=  >>=  <<=

#include <stdio.h>
int main()
{
	int x1 = 0;
	x1 = 10;//赋值 从右向左赋值
	printf("%d\n", x1);
	int x2 = 20;
	x2 += 10;//加等 等价于x=x+10; //其他操作符类似
	printf("%d\n", x2);
	return 0;
}

5.单目操作符

单目操作符即只有一个操作数的操作符。

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

5.1 逻辑反操作 !

逻辑真–>非0

逻辑假–>0

eg:

#include<stdio.h>
int main()
{
	int flag = 1;
	if (!flag)//(flag==1)条件为真即非零,取反(!)后if条件为假即0
	{
		printf("if条件为真!\n");
	}
	else
	{
		printf("if条件为假!\n");
	}
	return 0;
}

5.2 负值 - 正值 +

给数字前带+ -变成对应的正数或负数。

eg:

#include <stdio.h>
#include <windows.h>
int main()
{
	int x1 = 10;
	printf("%d\n", +x1);
	printf("%d\n", -x1);
	int x2 = -10;
	printf("%d\n", +x2);
	printf("%d\n", -x2);
	return 0;
}

5.3 取地址 &

每个变量在内存中都有对应的地址。

eg:

#include <stdio.h>
int main()
{
	int x = 10;
	printf("%d\n", x);
	printf("0x%p\n", &x);//%p:以十六进制打印地址;加0x:为了打印出来的是变量所对应的标准地址。
	return 0;
}

5.4 取反 ~

对一个数的二进制按位取反。

eg:

#include <stdio.h>
int main()
{
	unsigned x = 1;
	printf("%u\n", x);
	printf("%u\n", ~x);
	return 0;
}

5.5 前置、后置 ++ - -

++i :前置++,先自增再赋值使用。

i++ :后置++,先赋值使用再自增。

(- -同理)

eg:

#include <stdio.h>
int main()
{
	int i = 3;
	int a = i++;
	printf("%d\n", i);
	printf("%d\n", a);
	///
	int j = 10;
	int b = ++j;
	printf("%d\n", j);
	printf("%d\n", b);
	return 0;
}

5.6 解引用操作符 *

eg:关于解引用操作符 的理解以看变量的左值与右值。

#include <windows.h>
int main()
{
	int a = 10;
	int *p = &a;//指针p指向变量a
	int b=*p;//*p即解引用指针p,取出指针p所指地址空间里的值,然后赋给变量b
	printf("%d\n", b);
	return 0;
}

5.7 强制类型转换 (类型)

强制类型转换是把变量从一种类型转换为另一种数据类型。

强制类型转换分为隐式转换和显示转换。

eg:

#include <stdio.h>
int main()
{
	int a = 10;
	double b = 3.456;
	a = b;//隐式转换
	printf("%d\n", a);
    ///
	int c = 20;
	double d = 5.555;
	c = (int)d;//显式转换
	printf("%d\n", c);
	return 0;
}

6.关系操作符

关系操作符就是用来判断大小关系。

>
>=
<
<=
!=   用于测试“不相等”
==   用于测试“相等”

7.逻辑操作符

&&     逻辑与
||     逻辑或

&& 两边的表达式都为真,结果为真。

| | 两边的表达式只要有一个为真,结果为真。

注意:

&&和| |的判断规则:

&& 若第一个表达式为假,结果为假,则不判断第二个表达式。

| | 若第一个表达式为真,结果为真,则不判断第二个表达式。

8.条件操作符

exp1 ? exp2 : exp3//又称三目操作符,它是唯一有3个操作数的运算符

若表达式exp1为真,则执行exp2;
若表达式exp1为假,则执行exp3;

9.逗号表达式

1.逗号表达式中的每个表达式都会执行。

2.逗号表达式中的结果为最后一个表达式的值。

3.可以用()隔开逗号表达式。

exp1, exp2, exp3, …expN

eg:

#include <stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int c = 0;
	int d = ((c=a+b), 2, 3, 4, 5, 6, 7);
	printf("c=%d\n", c);
	printf("d=%d\n", d);
	return 0;
}

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

[] //中括号操作符,访问要访问元素的内容
() //函数访问操作符,要调用函数就要在函数名后加(),若函数有参数,则把参数填入()
.  //结构体成员运算符,左边必须为实体即变量
-> //结构体指针运算符,左边必须为指针

以上就是C语言入门篇--充分理解操作符的详细内容,更多关于C语言操作符的资料请关注我们其它相关文章!

(0)

相关推荐

  • C语言中的sizeof操作符用法及和strlen的区别

    一. 定义: sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数.其返回值类型为size_t,在头文件stddef.h中定义.在32位系统中: char的sizeof值为1,char是我们编程能用的最小数据类型. short的sizeof值为2: int.float.long为4: double为8: 所有的指针的sizeof值都为4. 二.语法: sizeof有三种语法形式,如下: 1) sizeof( object ); //

  • C语言安全编码之数值中的sizeof操作符

    通常来说获取数组的长度时不要对指针应用sizeof操作符. 现来看看下面这段代码: void clear(int array[]) { for(size_t i = 0; i < sizeof(array) / sizeof(array[0]); i++) { array[i] = 0; } } void dowork(void) { int dis[12]; clear(dis); /*...*/ } clear()使用sizeof(array) / sizeof(array[0])这种用法确

  • C语言中各种操作符的详细介绍(纯干货!)

    目录 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 (类型)   强制类型转换 条件操作符 总结 算术操作符 主要是 ( +   -   *   /    %) 五种算数操作符. 1.除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数. 2. 对于 / 操作符如果两个操作数都为整数,执行整数除法.而只要有浮点数执行的就是浮点数除 法. 3..% 操作符的两个操作数必须为整数.返回的是整除之后的余数. 当除数为小数时,int类型只会截取整数部分. 移位操作符 << 左移操作

  • C语言中的操作符优先级的详细介绍

    C语言中的操作符优先级的详细介绍 C语言中操作符的优先级大全, 当然c++, Objective-C,大部分语言都试用. 下面是来自The C Programming Language 2th的总结. OperatorsAssociativity(结合性) 1. () [] -> . 左->右 2. ! ~ ++ -- + - *(type)sizeof 右->左 3. * / % 左->右 4. + - 左->右 5. << >> 左->右 6

  • C语言入门篇--充分理解操作符

    目录 1.算术操作符 1.1除法运算 1.2取模运算 2.移位操作符 相关知识 1.移位运算是站在二进制角度移位的 2.左移右移,原始变量值不发生变化除非给原始变量赋值 3.整数移位运算不能整除时,只保留整数部分 4.C语言中的移位运算符 5.移位分为算术移左移.算术移右移和逻辑左移.逻辑右移 3.位操作符 3.1按位与& 3.2按位或 | 3.3异或 ^ 4.赋值操作符 5.单目操作符 5.1 逻辑反操作 ! 5.2 负值 - 正值 + 5.3 取地址 & 5.4 取反 ~ 5.5 前置

  • C语言入门篇--理解地址及内存

    1.内存 内存是电脑中一个重要的存储器,计算机中所有的程序都在内存中运行的,内存的性能对计算机的影响非常大. 内存是计算机与CPU进行沟通的桥梁,计算机会把程序由硬盘加载到内存中后再去使用. 为了有效的使用内存,把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节. 为了能够有效的访问即快速找到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址. 一般运行一个程序主要涉及计算机的三个设备:内存.CPU.硬盘. 1.1内存和CPU的关系 CPU是负责数据的运算和处理,内

  • C语言入门篇--变量[定义,初始化赋值,外部声明]

    1.变量 变量即变化的量. C语言中用 常量 来表示不变的值,用 变量 表示变化的值. eg:输出26个字母 #include <stdio.h> int main() { char c = 'A';//定义一个为char类型的变量c,并对其进行初始化 for (; c <='Z'; c++) { printf("%c", c); } printf("\n"); return 0; } 2.变量的定义 int temp; int age = 21;

  • C语言入门篇--初识指针和指针变量

    1.指针 指针就是地址(即一个数据). 2.指针变量 2.1概念 (1)指针变量是变量,是变量在内存中就会开辟空间,会有自己对应的的地址,有自己的变量大小. (2)指针变量里放的内容是地址(即指针). 2.2指针变量大小 32位平台下,4字节. 48位平台下,8字节. 2.3指针变量理解 理解前一定先看看,地址相关知识. #include <stdio.h> int main() { int a = 10; int *p = &a;//p为指针变量 printf("a的地址=

  • C语言入门篇--变量的左值和右值

    目录 1.普通变量 2.指针变量 2.1初步理解 2.2深入理解 在看此块内容前可以先看看内存及地址相关内容,更容易理解. 1.普通变量 一个变量是有三个属性: 1.变量的空间. 2.变量的内容. 3.变量的地址. 空间即若干字节,内容即空间里放了什么,地址即变量对应的空间地址. #include <stdio.h> int main() { int a = 10;//定义变量a,开辟4个字节的空间. a = 20;//见下述文字解释 int b = a;//见下述文字解释 return 0;

  • C语言入门篇--初识结构体

    目录 1.为什么要有结构体 2.结构体的定义 2.1结构体类型的定义 2.2定义结构体普通变量及访问 2.3定义结构体指针变量及访问 1.为什么要有结构体 (1)之前int.char等类型描述的结构体非常单一,只可描述一种类型. (2)数组也是描述同一类型的集合,只可描述一种类型. (3)而结构体使得C语言可以描述复杂类型,比如学生类型( 包含学生的名字.年龄.性别.电话号等信息). 结构体和数组的区别: 结构体:用来描述相同/不同数据元素类型的集合. 数组:用来描述具有相同数据元素类型的集合.

  • C语言实例上手深入理解操作符的使用

    目录 1.闰年练习 2.绝对值练习 3.字符转换练习 4.四则表达式练习 5.隐式类型转换 1.闰年练习 编写逻辑表达式判断用户给定的年份是否是闰年,年份可以被4整除但不能被100整除:年份可以被400整除. #include <stdio.h> int main(){ int year = 0 ,res = 0; printf("请输入年份数字:"); scanf("%d",&year); res = (!(year % 400)) || (!

  • C语言入门篇--关键字static详解

    目录 1.修饰局部变量 1.1作用 1.2举例 (1)不加static (2)加static (3)静态局部变量的初始化只会进行一次 2.修饰全局变量 2.1作用 2.2举例 (1)不加static (2)加static 3.修饰函数 3.1作用 3.2举例 (1)不加static (2)加static 1.修饰局部变量 1.1作用 ststic修饰局部变量,会改变局部变量的生命周期,不改变作用域: 生命周期:和全局变量一样具有全局性,但在内存中的位置没有改变,还在在静态存储区中. 作用域:作用

  • C语言入门篇--函数及数组用法

    目录 函数 1.函数的作用 2.函数的构成 (1)返回值 (2)函数名 (3)形参列表 (4)函数体 数组 1.定义数组 1.1不进行初始化 1.2进行初始化 1.3不给定数组元素个数 2.数组的经典用法 2.1求数组大小.元素大小.元素个数 2.2遍历 面向过程编程:C语言是面向过程的语言:在C语言中,把大部分的功能以一个个函数呈现,就称之为面向过程编程: 函数 是面向过程编程最关键的语法结构. 1.函数的作用 1.从工程上讲,函数可以让我们的代码更具有结构性,让代码更好看. 2.函数可以提升

  • C语言入门篇--注释,关键字typedef及转义字符详解

    目录 注释 1.注释意义 2.两种注释风格 2.1 C语言注释风格 2.2 C++注释风格 关键字typedef 1.注意 2.用法 语法结构 转义字符 1.转义字符及其含义 2.字面 转 特殊 3.特殊 转 字面 注释 1.注释意义 (1)代码中有不需要的代码可以直接删除,也可以注释掉. (2)有些代码比较难懂可以注释一下. 2.两种注释风格 2.1 C语言注释风格 /*xxxxxx*/ 一次可以注释一行或多行,但不能嵌套注释. eg: #include <stdio.h> int main

随机推荐