C语言程序设计学习第三天

1. 转义字符 \

        在c语言中,有着各种字符是不是能直接使用(', ", \),所有需要转义使用

        或者拼上其他字符会出现不一样的含义,下面是常用的转义字符

\'表示常量:'
\"表示常量:"
\\表示常量:\
\a警告,有蜂鸣声
\n换行
\t水平制表符
\r回车
\dddddd表示8进制数,\101转换ascll表字符就是A
\xddddd表示16进制数, \x41转换ascll表字符就是A

        说明:8进制101转换十进制,1*(8^2)+0*(8^1)+1 = 65

                   16进制x41转换十进制, 4*(16^1)+1 = 65  

#include <stdio.h>

int main() {
	
	printf("1%s\n", "\'");
	printf("2%s\n", "\"");
	printf("3%s\n", "\\");
	printf("4%s\n", "\a");
	printf("5-%s-\n", "\n");
	printf("6-%s-\n", "\t");
	printf("7-%s-\n", "\r");
	printf("8%s\n", "\101");
	printf("9%s\n", "\x41");

	return 0;
}

        计算一下 c:\test\328\test.c 的长度,这个长度为14,一个转义字符只站一字符,"\t"算1,

"\328"是8进制数,但8溢出范围了,所以\32和8算两个字符

#include <stdio.h>
#include <string.h>

int main() {

	printf("%d\n", strlen("c:\test\328\test.c"));

	return 0;
}

2. 数组

        数组:相同元素的集合

        数组的存储:存储在一条连续的内存空间,int arr[5] = {1, 2, 3, 4, 5};

        数组存储方式可以通过指针验证,可以看到指针+1读取的值和数组值的顺序是一样的,11后面的数就不在数组内了

#include <stdio.h>

int main() {
	int arr1[5] = { 1, 3, 7, 9, 11 };
	int *p = arr1;
	for (int i = 0; i < 7; i++) {
		printf("%d ", *p);
		*p++;
	}

	return 0;
}

        数组有多种声明方式

#include <stdio.h>

int main() {
	printf("arr1: ");
	int arr1[5] = { 1, 2, 3, 4, 5 };
	for (int i = 0; i < 5; i++) {
		printf("%d ", arr1[i]);
	}

	printf("\narr2: ");
	int arr2[5] = { 0 };
	for (int i = 0; i < 5; i++) {
		printf("%d ", arr2[i]);
	}

	printf("\narr3: ");
	int arr3[5] = { 1, 2, 3 };
	for (int i = 0; i < 5; i++) {
		printf("%d ", arr3[i]);
	}
	return 0;
}

3. 移位符

        移位符有左右之分,原理就是将二进制数据移位,向左移数值会变大,反之右移数值会变小,并且右移有最小值为0

操作值的变化
左移位符:<<   << 20000 0001  <<  0000 0100 1 -> 4
右移位符:>>>> 10000 0100  >>  0000 0010 4 -> 2
#include <stdio.h>

int main() {
	int a = 1;
	int b = a << 2;
	printf("%d\n", b);

	int c = b >> 1;
	printf("%d\n", c);

	return 0;
}

3. 单位操作符

3.1. ~按位取反

        计算机中存储整数是通过补码的形式,并且正数和负数的规则不一样

正数负数
原码展示数展示数
反码和原码一样符号位置不变,其他取反
补码和原码一样反码+1
#include <stdio.h>

int main() {
	int a = 0;
	printf("%d\n", ~a);

	int b = 2;
	printf("%d\n", ~b);
	return 0;
}

        计算a = 0的按位取反,a = 0二进制表示

        00000000 00000000 00000000 00000000 取反 11111111 11111111 11111111 11111111

        如下图,计算得到的原码是-1

负数
原码10000000 00000000 00000000 00000001
反码11111111 11111111 11111111 11111110
补码11111111 11111111 11111111 11111111

        计算b = 2的按位取反,b = 2二进制表示

        00000000 00000000 00000000 00000010 取反 11111111 11111111 11111111 11111101

        如下图,计算得到的原码是-3

负数
原码10000000 00000000 00000000 00000011
反码11111111 11111111 11111111 11111100
补码11111111 11111111 11111111 11111101

3.2. ++ --

        ++:数值+1 , --: 数值-1

++--
前置++a:先加算,后赋值++a:先加算,后赋值
后缀a++:先赋值,后加算a++:先赋值,后加算

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值