IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言操作符(1) -> 正文阅读

[C++知识库]C语言操作符(1)

易错点

1)对于取模%操作符来说,两边必须是整型。

2)对于 / 操作符如果两个操作数都为整数,执行整数除法;而只要有一个浮点数,执行的就是浮点数除法。

一、移位操作符

<< 箭头指向左手:左移操作符

>>箭头指向右手:右移操作符

注:移动的是二进制位,位数看数据类型。

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

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

在计算机中数字都是用补码存放,原因很简单,因为补码与数字是一 一对应的,
比如用原码时,正0、0、负0都表示0。
?原码不是一 一对应。

所以a的二进制原码为:1001(这里就不补全为32位了)

在移位运算时是用补码的,即1111,

算术右移一位为:1111,

再变为原码1001即-1传给b。

所以b还是-1。

注:左移操作符,左边丢弃,右边补0.

只能作用于整数。?

?

?例:不用临时变量交换两级数

1.2.正常写法:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int a = 10;
	int b = 20;
	int tmp = 0;
	printf("before:a = %d, b = %d\n", a, b);
	tmp = a;
	a = b;
	b = tmp;
	printf("after:a = %d, b = %d\n", a, b);

	return 0;
}

加减法:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int a = 10;
	int b = 20;
	printf("before:a = %d, b = %d\n", a, b);
	a = a + b;
	b = a - b;
	a = a - b;
	printf("after:a = %d, b = %d\n", a, b);

	return 0;
}

缺陷:a和b都为较大的值时,相加可能溢出,总和不准。

2.

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int a = 10;
	int b = 20;
	printf("before:a = %d, b = %d\n", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("after:a = %d, b = %d\n", a, b);

	return 0;
}

原理参考:https://blog.csdn.net/borefo/article/details/4622288?

任何一位二进制数同 1 异或相反(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
任何一位二进制数同 0 异或不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)

a = 3, b = 4

? ? ?a = 011

? ? ?b = 100

a ^ b = 111,和a按位比是:相反,不变,不变

? ? ? b = 100?

a^b^b= 011,和a^b按位比是:相反,不变,不变

即a与a^b:相反,不变,不变,

a^b与a^b^b:相反,不变,不变,

a与a^b是相反的,a^b又与a^b^b相反,那么a^b = a相反,推出a^b^b = a相反的相反,那么就是a 与 a^b^b是相同的。

所以有两个异或直接抵销。

?疑点1.正数为什么原、反、补相同?

2.十进制转二进制原理是什么?

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int num = 0;
	int count = 0;
	int i = 0;
	scanf("%d", &num);
	//统计num的二进制补码中1的个数
	for(i=0; i<32; i++)
	{
		if(1 == ((num>>i)&1))
			count++;
	}
	printf("%d\n", count);

	return 0;
}

?注:()的优先级问题。

?

?与的位操作符为 &

二、赋值操作符:重新赋值

三、

?四、

?注:a + b 有两个操作数,所以“+”是双目操作符。

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int a = 0;
	if(a)
	{
		printf("666\n");
	}
	if(!a)
	{
		printf("666\n");
	}

	return 0;
}

!a:a为假时。

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

int main()
{
	int a = 10;
	int* p = &a;//取地址操作符
	*p = 20;//解引用操作符
	printf("a = %d\n", a);

	return 0;
}

?

sizeof后面是数据类型不能省略括号,后面是变量名时可以省略。?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 10:59:24  更:2021-09-06 11:01:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 13:46:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计