c语言基础查漏补缺
来源:互联网 发布:游戏源码论坛 编辑:程序博客网 时间:2024/04/30 11:32
该部分只是用来记录c语言模糊的知识点
4、~ 按位取反
习题
*编写一个函数,用来输出整数在内存中的二进制形式
- 字符常量 char(字符常量单引号里面只能写入一个字符,而且不能是中文字符)
以下写法错误
char c = '123';char c1 = '哦';
- sizeof
1.作用
用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
2.基本形式
sizeof( 变量\常量 )
int size = sizeof(a);
sizeof 变量\常量
int size = sizeof a;
sizeof( 数据类型 )
intsize = sizeof(int);
不能是sizeof 数据类型
- 关系运算(比较运算)
关系运算符中==、!=的优先级相等,<、<=、>、>=的优先级相等,且前者的优先级低于后者:2==3>1
关系运算符的结合方向为“从左往右”: 4>3>2
关系运算符的优先级小于算术运算符:3+4>8-2
3 > 4 + 7 // 0(3>4) + 7 // 75 != 4 + 2 * 7 > 3 == 10 // 0
字符串
3、^ 按位异或
- 在c语言中,字符串可以看成是一个字符数组,为了能和普通的字符数组区分开,要在字符串尾部添加结束标志’\0'
有三种初始化方法
char s[] = {'l','e','o','\0'};//字符串char s1[4] = {'l','e','o','\0'};//字符串char s3[] = "mj";//字符串会自动在尾部添加'\0',他的长度还是4
下面代码就会出现一些问题
char s2[4] = {'l','e'};//不是字符串,只是字符数组 第1、 2如果不添加结束标志,字符串就会有问题。 比如 在打印的时候char s[] = {'l','e','o','\0'};char s2[4] = {'l','e'}printf("%s\n",s2);//因为没有结束标志,打印的时候 会输出leleo等乱七八糟的字符,就是因为在内存中
出现错误的原因
s2
l
e
S
l
e
o
\0
- 字符串输出 c语言中有两种
printf("%s\n",s);
puts(s);//两者区别 1 printf可以输出多个,puts只能输出一个,2puts()自动换行
- 字符串输入
scanf()//可以同时读取多个字符串,不能读取空格tab 存放完毕后,系统会在尾部加上一个结束标记\0
gets(s);//不安全的,一次只能读一个字符串,可以读取空格 、tab的字符串 存放完毕后,系统会在尾部加上一个结束标记\0
- 字符串数组
一维字符串数组可以存放一个字符串
二维字符串数组,可以存放多个字符串
- 字符处理函数
1、字符输出函数putchar (一次性只能输出一个字符)
putchar(65);//直接在控制台输出A
putchar('A');//直接在控制台输出A
2、字符输入函数getchar (一次性只能输出一个字符)
- 字符串处理函数
1、strlen函数(测量一个字符串的字符串长度,不包括结尾标识符’\0'不是测量字符数量 ,一个中文占3个字符串长度) 注意:char s1 ={‘m’,’j’};缺少结尾标示符\0,要经常注意这个问题
2、strcpy函数()将右边的字符串复制到到左边的字符串
3、strcat函数将右边的字符串添加到到左边的字符串 注意:要注意左边的长度要足够
4、strcmp函数比较左右两边字符串的长度
两个字符串从左至右逐个字符比较(按照ASKII码大小比较),直到字符不相同或者遇见’\0’为止。如果全部字符都相同,返回0.如果不相同,则返回两个字符串中的第一个不相同字符ASC码的差
5、strlwr函数所有字母小写
6、strupr函数所有字母大写
- 类型说明符(long short signed unsigned)
int 4字节
short 2字节
long 8字节
long long 8字节
long int a = 1000000000;long a =100000000;//这两种写法都是一样的 long int =longprintf("%ld",b);//如果是long类型打印的时候输出操作符为%ldlong long c = 1000000000;printf("%lld\n",c);
- 位运算
1、 & 按位与
对应的二进位都为1 结果才为1,否则结果为0
例如:5 & 3 结果为1
0 1 0 1 (5)
0 0 1 1 (3)
0 0 0 1 (1)
printf("%d\n",5&3);//最后输出1 ,说明计算正确
2、| 按位或
对应的二进位有一个为1就为1,否则为0
例如:5 | 3 结果为7
0 1 0 1 (5)
0 0 1 1 (3)
0 1 1 1 (7)
printf("%d\n",5|3);//最后输出7,说明计算正确
3、^ 按位异或
对应的二进位不相同就为1,否则为0
自己^自己 结果为0 比如8^8
交换 9^5^6 == 9^6^5
任何数值跟0进行异或,结果还是原来的数值 ,9^0=9
a^b^a = =b
例如:5 | 3 结果为7
0 1 0 1 (5)
0 0 1 1 (3)
0 1 1 0 (6)
对整数a的各二进位进行取反,符号位也取反(0变1,1变0)
5、<<左移
把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方
由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性
例如:9<<1 ->9*2 ==18
9<<2 -> 9*2*2 =36
9<<n ->9*2的n次方
6、<<右移
把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方
为正数时,符号位为0,最高位补0
为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定
习题
*在不用引入其他变量的情况下,使用位异或^运算符实现两个变量值的互换
int a=10;int b=9;a = a^b; //a=10^9b = a^b; //b = 10^9^9=10a = a^b; // a= 10^9^10 = 9
*使用位与&运算符变量的奇偶性
int a=15;// 15:1111int b =14;//14:1110 //规律 :偶数最后一位肯定是0,奇数最后一位肯定是1/**15 :11111 0001----------- 0001 =18 10001 0001---------- 0000 = 0*/if(a&1==0) printf("偶数");else printf("奇数");
*编写一个函数,用来输出整数在内存中的二进制形式
int main(){ printBinary(3); return 0;}void printBinary(int num){ int num=3; int temp = (sizeof(num)<<3) - 1;//计算一下一共多少位,以防止编译器 for(int i=temp;i>=0;i--) { int temp = num>>i &1; printf("%d",temp); }}
0 0
- c语言基础查漏补缺
- C语言查漏补缺
- c语言查漏补缺
- C语言查漏补缺
- C语言——查漏补缺
- Java基础查漏补缺
- Java基础查漏补缺
- 基础测试查漏补缺
- c语言查漏补缺——指针
- C语言查漏补缺——关键字篇
- c语言查漏补缺——指针
- C语言知识查漏补缺与心得体会(1)
- C语言知识查漏补缺与心得体会(2)
- C语言知识查漏补缺与心得体会(3)
- 黑马程序员-②C语言查漏补缺总结 (下)
- c 查漏补缺1
- 【C/C++】C++基础知识查漏补缺
- C#基础学习复习查漏补缺
- json开发的一个细节:服务端及客户端的json所用的jar包不同
- Skia深入分析6——skia中图像编解码代码概述
- Java实例3 - 三角数字
- Cocos2d-x 3.0-Vector&map&value
- Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)
- c语言基础查漏补缺
- 重新认识 :转发与重定向 forward and Redirect
- Cocos2d-x 3.0-新的Label-Cocos2d-x官方文档
- Java实例5 - 考拉兹猜想 Collatz Conjecture
- Cocos2d-x 3.0-win7+vs2012+adt+ndk环境搭建
- Python 学习经历(二) :Ubuntu 上快速安装及配置 virtualenvwrapper 虚拟环境
- 二维数组的认识及其表示元素的两种方式
- 四边形不等式优化DP
- Cocos2d-x 3.0-《微信飞机大战》实现