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语言基础)操作符详解2(数据在内存中的存储规则)以及字符串的倒置(详解) -> 正文阅读

[C++知识库](C语言基础)操作符详解2(数据在内存中的存储规则)以及字符串的倒置(详解)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


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


一、操作符详解2

1整数在内存中的存储规则

????????我们的机器通常分为32位和64位机器,其所对应的就是在硬件设备中的“特殊的线的数量”

会使我们在计算整型等类型中影响其字节数量。大部分我们所使用的编译器都是使用32位模式的,所以我们以下介绍32位机器中整数的存储规则。

? ? ? ? 首先,用户输入一个数,这个数在内存中是以二进制补码的形式存储的。正数的原码,反码,补码都相同,负数的原码,反码,补码都不同。我们将详细介绍负数的原,反,补码

#include<stdio.h>
int main()
{
    int a = -5;
    //-5的原码
    //10000000000000000000000000000101 -其中第一位是符号位
    //11111111111111111111111111111010 - 符号位不变,其他位按位取反,得到-5的反码
    //11111111111111111111111111111011 -反码加1得到-5的补码
    return 0;
}

2常见的操作符详解?

(1)介绍按位或,与,异或的概念,并且利用异或操作符实现不创建新的变量达到交换两个数的值

数字在计算中是用其补码进行计算的

异或的概念,相同的为0,不同的为
?按位与是有0为0,全1才为1
?按位或是有1为1 ,全0为0

?异或操作符实现不创建新的变量达到交换两个数的值

首先3和3异或为0,0和其他数异或,该数不变。所以,我们可以

#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	printf("交换前:a=%d b=%d\n", a, b);
	a = a ^ b;
	b = a ^ b;//a^b^b还是a
	a = a ^ b;//a^b^a=b;
	printf("交换后:a=%d b=%d\n", a, b);
	return 0;
}

(2)强制类型转换?

? ? ? ? int a = (int) 3.14;括号应该扩到类型上,不是数字上;

(3)sizeof是求一种类型的字节长度,也是一种单目操作符

int main()
{
	int a = 10;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof a);
	printf("%d\n", sizeof int);//注意int 的括号不能去掉
	return 0;
}

sizeof与数组的关系

#include<stdio.h>
void test1(int arr[])//int arr[] 等价于int* arr指针
{
	printf("%d\n", sizeof(arr));//数组传参都是传进来数组的首地址
}
void test2(int ch[])//int arr[] 等价于char* ch指针
{
	printf("%d\n", sizeof(ch));//数组传参都是传进来数组的首地址
}
int main()
{
	int arr[10] = { 0 };
	char ch[10] = { 0 };
	printf("%d\n", sizeof(arr));//40个字节
	printf("%d\n", sizeof(ch));//10个字节
	test1(arr);//4个字节
	test2(ch);//char类型的指针同样是4个字节

	return 0;
}

3整型提升

比方说char? a=5;? char? b=126;? a+b=?

整型提升
int main()
{
	char a = 5;
	//截断
	//00000000000000000000000000000101
	//00000101
	char b = 126;
	//00000000000000000000000001111110
	//01111110
	//当a和b相加的时候,a和b都是char类型
	// 表达式计算就要发生整型提升
	// 00000000000000000000000000000101
	// 00000000000000000000000001111110
	// 00000000000000000000000010000011-c
	// 最高位即符号位,若其为1,则全补1;为0则全补0;
	//
	char c = a + b;
//	10000011 - c
	//再发生一次整型提升
	//11111111111111111111111110000011-c补码
	//11111111111111111111111110000010-c的反码(补码-1)
	//10000000000000000000000001111101 - c的原码
	printf("%d\n", c);


	return 0;
}

4 关系操作符

?>
>=
<
<=
!=(不等于)
==(判断是否相等)

5逻辑操作符

&&逻辑与-左操作数为假,右边不计算

|| 逻辑或-左操作数为真,右边不计算

360笔试题

#include<stdio.h>
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	//因为a本身为0,后置++,所以a++在表达式中值为0;为假,后面的操作均不执行,所以打印结果为
	//a=1,b=2,c=3,d=4
	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);

	return 0;
}


二、字符串的倒置


例子:将 I like beijing.

逆序为 beijing like I

思:将空格作为分割,先将每一部分逆序为I ekil gnijieb

再将I ekil gnijieb 全部逆序,为beijing like I

补充:scanf读入以空格为分界,gets是以回车为分界

代码实现

倒置字符串
比如i like beijing.
变成beijing i like.

#include<string.h>
#include<assert.h>
//assert是断言,是确保char*指针不为空指针NULL
void reverse(char* left, char* right)
{
	assert(left && right);
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[100] = { 0 };
	//输入
	gets(arr);
	//逆置
	int len = strlen(arr);
	//1 .逆置每个单词
	char* start = arr;
	char* end = start;
	while (*end !='\0')
	{
		while (*end != ' ' && *end !='\0')
		{
			end++;
		}
		reverse(start, end - 1);
		if (*end == '\0')
			start = end;
		else
		start = end + 1;
		end = start;
	}
	//2.整个字符串的逆序
	reverse(arr, arr + len - 1);
	//输出
	printf("%s\n", arr);
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:08:07  更:2021-11-29 16:09:52 
 
开发: 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年11日历 -2024/11/24 10:02:53-

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