C语言知识总结(2)
选择结构-if
if(表达式) {}
{}为作用域
多重if-else 例如:
#include <stdio.h>
int main(){
int amount = ;
if(amount<=){
printf("没有购物不能获奖");
}else if(amount%==){
printf("恭喜你获得一等大奖!");
}else if(amount%==){
printf("恭喜你获得二等奖");
}else if(amount%==){
printf("恭喜你获得鼓励奖");
}else{
printf("谢谢参与");
}
return ;
}
嵌套if-else 例如:
#include <stdio.h>
int main(){
double speed = 10.71; //百米速度
int male = ; //1代表男,0代表女
if(speed<){
if(male){
printf("进入男子组决赛");
}else{
printf("进入女子组决赛");
}
}else{
printf("没有进入决赛,继续努力!");
}
return ;
}
选择结构-switch
switch(表达式) {case 数值1: break; … default: break;}
#include <stdio.h>
int main(){
int day = ;
switch(day){
case :
printf("星期一吃青菜\n");
break;
case :
printf("星期二吃鱼\n");
break;
case :
printf("星期三吃肉\n");
break;
case :
printf("星期四吃面条\n");
break;
default:
printf("平时只能喝汤\n");
break;
}
return ;
}
注意:每个case后面是否有break
循环结构-while
- while(表达式) { }
continue:用于跳过本次循环体剩余语句,进入下一次循环的条件判断,continue只是跳过当前的循环体,并没有跳出整个循环。
break的使用:某次的时候停止循环。
循环结构-do while
一定会执行一次循环体
while 和 do while 比较
inti=;
while(i<){
i++;
}
// i = 0
inti=;
do{
i++;
}while(i<);
// i = 1
循环结构-for
for(参数初始化;条件判断;参数更新){
//循环操作
}
for(;;) 这个是个死循环
for括号内的三个语句都是表达式,执行次序如下:
- 运行表达式1(参数初始化)
- 运行表达式2(条件判断),判断是否为真,若为真执行循环操作,若为假则结束循环
- 运行表达式3(参数更新),更新参数,进入步骤2执行下一轮循环
查看一个整数的二进制可用如下函数:
// 输出整数的二进制形式
void putBinary(int n)
{
int bits = sizeof(n) * ;
while (bits-->) {
printf("%d", n>>bits&);
if (bits%==) printf(" ");
}
printf("\n");
}
1个字节等于8bit

- 可以连续使用2个long,也就是long long。一般来说,long long的范围是不小于long的,比如在32bit编译器环境下,long long占用8个字节,long占用4个字节。不过在64bit编译器环境下,long long跟long是一样的,都占用8个字节。
还有一点要明确的是:short int等价于short,long int等价于long,long long int等价于long long
signed 和 unsigned
1>首先要明确的:signed int等价于signed,unsigned int等价于unsigned
2> signed和unsigned的区别就是它们的最高位是否要当做符号位,并不会像short和long那样改变数据的长度,即所占的字节数。
signed:表示有符号,也就是说最高位要当做符号位,所以包括正数、负数和0。其实int的最高位本来就是符号位,已经包括了正负数和0了,因此signed和int是一样的,signed等价于signed int,也等价于int。signed的取值范围是-231 ~ 231 - 1
unsigned:表示无符号,也就是说最高位并不当做符号位,所以不包括负数。在64bit编译器环境下面,int占用4个字节(32bit),因此unsigned的取值范围是:0000 0000 0000 0000 0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111 1111 1111,也就是0 ~ 232 - 1
位运算
1、&按位与
1>功能: 只有对应的两个二进位均为1时,结果位才为1,否则为0。
2>举例: 比如9&5,其实就是1001&101=1,因此9&5=1
3>规律: 二进制中,与1相&就保持原位,与0相&就为0
2、|按位或
1>功能: 只要对应的二个二进位有一个为1时,结果位就为1,否则为0。
2>举例: 比如9|5,其实就是1001|101=1101,因此9|5=13
3、^按位异或
1>功能: 当对应的二进位相异(不相同)时,结果为1,否则为0。(二进制加法判断)
2>举例: 比如9^5,其实就是1001^101=1100,因此9^5=12
3>规律:
相同整数相^的结果是0。比如5^5=0
多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6
因此得出结论:a^b^a = b
4、~ 取反
对整数a的各二进位进行取反,符号位也取反(0变1,1变0)
5、<< 左移
把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方
由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性
6、>> 右移
- 把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方
- 为正数时,符号位为0,最高位补0
为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定
运算符的优先级(从高到低)
|
优先级 |
描述 |
运算符 |
|
1 |
括号 |
()、[] |
|
2 |
正负号 |
+、- |
|
3 |
自增自减,非 |
++、--、! |
|
4 |
乘除,取余 |
*、/、% |
|
5 |
加减 |
+、- |
|
6 |
移位运算 |
<<、>>、>>> |
|
7 |
大小关系 |
>、>=、<、<= |
|
8 |
相等关系 |
==、!= |
|
9 |
按位与 |
& |
|
10 |
按位异或 |
^ |
|
11 |
按位或 |
| |
|
12 |
逻辑与 |
&& |
|
13 |
逻辑或 |
|| |
|
14 |
条件运算 |
?: |
|
15 |
赋值运算 |
=、+=、-=、*=、/=、%= |
|
16 |
位赋值运算 |
&=、|=、<<=、>>=、>>>= |
ASCII对照表

C语言知识总结(2)的更多相关文章
- 【转】R语言知识体系概览
摘要:R语言的知识体系并非语法这么简单,如果都不了R的全貌,何谈学好R语言呢.本文将展示介绍R语言的知识体系结构,并告诉读者如何才能高效地学习R语言. 最近遇到很多的程序员都想转行到数据分析,于是就开 ...
- STM32F4 阿波罗 库函数与C语言知识
先聊一聊: 之前使用32都是用的库函数,但是没有理解为什么那么操作,有很多的文件我也不知道要看哪一个,感觉云里雾里,没有学清楚一件东西的感觉不太好,于是就在前几天一直跟着比较详细的视频学习.开始老师讲 ...
- C语言知识汇总,史上最全面总结,没有之一
C语言基础 C语言学习路线 C语言入门笔记 初识C语言 简单的C程序示例 我们编写的C代码是怎样跑起来的? 简单示例,VS2019调试C语言程序 C语言基础-数据类型 深入理解变量,变量的声明,定义, ...
- 老师不讲的C语言知识
老师不讲的C语言知识 导语: 对于工科生,C语言是一门必修课.标准C(ANSI C)这个看似简单的语言在硬件底层编程.嵌入式开发领域还是稳坐头把交椅.在20年5月份,C语言就凭借其在医疗设备上的广泛应 ...
- Go语言知识查漏补缺|基本数据类型
前言 学习Go半年之后,我决定重新开始阅读<The Go Programing Language>,对书中涉及重点进行全面讲解,这是Go语言知识查漏补缺系列的文章第二篇,前一篇文章则对应书 ...
- 关于C语言知识调查
因为上一篇随笔对这一部分写得不够清楚,因此在这篇做一些补充. 你是怎么学习C语言的? 起初,对于C语言的学习主要是通过老师课堂的教学,完成相关的课后作业.与我的技能相比的话,他们都有一个共同点需要去实 ...
- 基础语言知识JAVA
1. 总结: JAVA比较重要的博客: http://www.runoob.com/java/java-tutorial.html (JAVA教程) http://blog.csdn.net/ ...
- [Java面试九]脚本语言知识总结.
核心内容概述 1.JavaScript加强,涉及到ECMAScript语法.BOM对象.DOM对象以及事件. 2.Ajax传统编程. 3.jQuery框架,九种选择器为核心学习内容 4.JQuery ...
- JavaScript语言知识收藏
接触Web开发也已经有一段时间了,对javascript的认识也比以前有了更加深入的认识了,所以觉得应该整理一下. 一.JavaScript不支持函数(方法)的重载,用一个例子证明如下: functi ...
- C语言知识整理(3):内存管理(详细版)
在计算机系统,特别是嵌入式系统中,内存资源是非常有限的.尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效地管理内存资源.本文是作者在学习C语言内存管理的过程中做的一 ...
随机推荐
- 一个简单的弹出层ProgressBar
https://github.com/eltld/SimpleLoading
- html页面head区域的编码书写规范
今天我们简单的介绍一下head区域主要放置了内容.这里就不强调css和javascript了,这两者是大家所熟知的. head区一般必须加入的标识有: 公司版权注释 <!--- the site ...
- Javascript禁止子元素继承父元素的事件
3种方法1.在父元素事件的function中加if(event.target==this){ }2.子元素事件function最后加event.stopPropgation():// 阻止事件冒泡3. ...
- C#“同步调用”、“异步调用”、“异步回调”
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: ); //模拟该方法运 ...
- windows 8.1 在硬盘上创建扩展分区
管理员-命令提示符-> diskpart -->进入分区工具. list disk -->显示电脑连接磁盘数. select disk * -->选择编号为*的 ...
- [golang学习] 在idea中code & debug
[已废弃]不需要看 idea 虽然审美倒退了n年. 不过功能还是相当好用的. idea 的go插件堪称最好的go ide. 1. 语法高亮支持 2. 智能提示 3. 跳转定义(反跳转回来) 4. 集成 ...
- iOS开发,让数据更安全的几个加密方式
任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要.在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障.这篇 ...
- 运用Real Spy Monitor监控网络
Real Spy Monitor是一个监测互联网和个人电脑,以保障其安全的软件.包括键盘敲击.网页站点.视窗开关.程序执行.屏幕扫描以及文件的出入等都是其监控的对象. 1.添加使用密码 在使用Real ...
- 11. Android框架和工具之 Logger(调试代码)
1. Logger Logger是android是一个简单.漂亮.功能强大的Android日志程序. 日志程序提供了 : 线程信息Thread information 类信息Class informa ...
- Android(java)学习笔记65:线程的生命周期
1. 我们学习线程本质就是学习如何开始线程和终止线程.下面这个关于线程的生命周期图,要牢记: 新建状态:当程序使用new关键字创建了一个线程之后,该线程就处于新建状态.此时和其他Java对象一样,它仅 ...