零基础快乐学习C/C++——02

"本文探讨了C语言中数组的使用,特别是字符数组与字符串的区别,强调了''在字符串结束中的作用。此外,详细解释了按位取反运算符(~)、自增自减运算符(++)、类型转换以及条件操作符的用法。还涵盖了原码、反码和补码的概念,以帮助理解整数在内存中的存储方式。"
摘要由CSDN通过智能技术生成

1. 小案例

尝试输入以下代码,猜测最后的输出是否相同

#include<stdio.h>

int main() {
	char ar1[] = "abc";
	char ar2[] = { 'a','b','c' };

	printf("%s\n", ar1);
	printf("%s\n", ar2);

	return 0;
}

输出结果如下图,第一行较好理解,第二行则是生成了随机值

为了探究背后的原因,在调试窗口中打开监视窗口
在这里插入图片描述
ar1与ar2的区别在于有没有末尾的0,由于“\0”在数组中表示结束的意思,而ar2并没有含有此结束标示,所以在打印的时候会继续随机输出一些数,而想要得到相同输出也容易,添加0即可

2.运算符

强调几个特殊的

2.1 ~ 按位取反

int a = 0;
int b = ~a;//有符号的整数
printf("%d\n",b);//打印的是这个数的原码

b最后算得的结果为-1,为了弄清楚为何为1,需知道以下知识:

  1. int型占4byte 32bit 故a为32个0;
  2. b在进行了按位取反之后,为32个1;
  3. int是有符号整型,也就是说最高位代表了正负,0为正,1为负,故a为正数,b为负数
  4. 负数在内存中存储的为二进制的补码,而使用的,打印的是这个数的原码,所以需要明白内存中存储的b(全1)为b的补码,最后的输出结果需要将b的补码转化成原码
  5. 补码与原码的互相转化为(除了最高位符号位不变)全部位取反+1

2.2 —和++

int a = 10;
int b = a++;//后置++,先用值,再++
pirntf("a = %d b = %d\n", a,b);//a为11 b为10
int a = 10;
int b = ++a;//前置++,先++,再用值
pirntf("a = %d b = %d\n", a,b);//a为11 b为11

同理,–相同

2.3(类型)强制类型转换

int a = 3.14;//打印报错,原来3.14为double类型,想要将其变为int类型就需要强制类型转换
int a = (int) 3.14//double -->int

2.4关系操作符

!=不等于 ==测试相等

2.5逻辑操作符

在介绍逻辑操作符需要知道:真表示非0;假表示0

  1. &&逻辑与 ----可以理解为 且(a为真,b为真,及结果为真)
  2. ||逻辑或 -----可易理解为 或 (两个里面有一个为真 即为真)

2.6条件操作符

  1. exp1 ? exp2 : exp3;
    exp1是表达式,不是一个值
    意思为表达式1的结果如果为真,表达式2要执行,表达式2的结果为整个表达式的结果;如果表达式1的结果为假,表达式3要执行,表达式3的结果为整个表达式的结果
    举个例子
int a = 10;
int b = 20;
int max = 0;

max = (a > b ? a : b);
//若a>b,那么表达式2被执行,执行结果为a,即把a的值赋给max:若a不大于b,那么表达式3被执行,执行结果为b,即b的值赋给max
  1. [ ]下标引用操作符
int arrr[10] = { 0 };
arr[4];//[ ]下标引用操作符

3.关于原码反码补码

只要是整数,内存中存储的都是补码(二进制)
  1. 对于整数中的正数来说,原码反码补码相同
  2. 对于整数中的负数来说,存储的是补码

原码:直接按照正负写出的二进制序列
反码:原码的符号位不变,其他位按位取反
补码:反码+1

举个例子,-2:
原码:1000…10(共32bit)
反码:1111…01
补码:1111…110

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在这个问题中,用户提供了两段代码,分别是引用\[1\]和引用\[2\]。这两段代码都是用来在一个数组中查找指定数的位置。 引用\[1\]是一个C++代码示例,它使用了iostream和stdio.h头文件,并使用了命名空间std。代码中使用了一个while循环来不断读取输入的n值,然后创建一个大小为n的整型数组a,并通过for循环读取数组的元素。接下来,代码读取了一个整数m,并使用for循环遍历数组a,查找是否有与m相等的元素。如果找到了相等的元素,则将其位置赋值给变量t,并跳出循环。最后,根据t的值输出结果。 引用\[2\]是另一个C代码示例,它使用了stdio.h头文件。代码中同样使用了一个while循环来不断读取输入的n值,然后创建一个大小为n的整型数组a,并通过for循环读取数组的元素。接下来,代码读取了一个整数m,并使用for循环遍历数组a,查找是否有与m相等的元素。如果找到了相等的元素,则将其位置赋值给变量count,并将flag设置为1,表示找到了。最后,根据flag的值输出结果。 综上所述,这两段代码都是用来在一个数组中查找指定数的位置。它们的实现方式略有不同,但都能达到相同的目的。 #### 引用[.reference_title] - *1* [1143: 零起点学算法50——数组中查找数](https://blog.csdn.net/weixin_43965597/article/details/113104995)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [问题 C: 零起点学算法82——数组中查找数](https://blog.csdn.net/chenhannan0024/article/details/127568844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值