当前位置:网站首页>鹏哥C语言第六节课
鹏哥C语言第六节课
2022-07-26 10:36:00 【竹某】
一.原码,反码,补码
整型数在C语言以二进制码形式存储。无符号整型的二进制码无符号位,只有数值位;有符号整型的二进制码的最高位为符号位,之后的为数值位。0代表整数,1代表负数。正整型数以补码(正整型数的原码反码和补码相同)形式存储,而负整型数以补码形式存储。
由有符号整型数的字面值到原码:
符号为+,符号位为0;
符号为-,符号位为1。
正整型数的原码反码和补码相同。而负整型数的原码除了符号位之外,按位取反,得到反码;反码加1,得到补码。
负整型数在内存中以补码形式存储,这是为了方便加法(减法)运算。但是在翻译为字面量时,使用的是原码(会把补码译为原码)。
比如下面的代码:
#include <stdio.h>
int main() {
int a = 0;//00000000 00000000 00000000 00000000
int b = ~a; //这个赋值语句的意思是“11111111 11111111 11111111 11111111”是b在内存中的形式(补码)
printf("%d\n",b);//结果是-1
return 0;
}二.auto,register,static关键字,typedef关键字初步用法
typedef:类型(重)定义操作符。
一个最简单的作用就是重定义类型
typedef unsigned int u_int;
unsigned int a = 10;//unsigned int可能过于长
//等价于 u_int a = 10;
//使用typedef的一个常见的错误是把它与#define混淆,之后没有加;关于这个重定义的使用范围的问题暂且不做讨论。
auto:所有的局部变量默认为自动(automatic)变量。意即:进入作用域自动创建,出作用域自动销毁。如:auto int a=10;但是auto一般省略。如此看来,auto只适用于局部变量,体现了局部变量的生命周期和其作用域的关系。
static:有三种情况。
1.修饰局部变量
区别于auto,改变了局部变量的生命周期。使局部变量一经创建,就能存活到程序结束。
2.修饰全局变量
改变了局部变量的作用域。是全局变量只能在定义它的源文件中使用。这对于多文件编程设置文件之间变量访问权限时很有用
3.修饰函数
类似于全局变量。改变了函数的链接属性。能被定义它的之外的源文件调用,称为函数的外部链接属性;只能被定义它的源文件调用,称为函数的内部链接属性。
函数也要先声明后使用,且函数默认是可外部链接的。在其前加static取消了其外部链接属性,使其成为了一个内部链接函数。
(从这里的学习可以发现,之前关于局部变量生命周期的理解是不正确的:之前认为局部变量的生命周期从进入其作用域开始,到离开其作用域结束。这是不全面的,没有考虑static修饰的情况)
//源1.cpp
int sum(int a, int b) {
return a + b;
}
int a = 10;//源2.cpp
#include <stdio.h>
int sum(int, int);//函数和变量均要先声明后使用
extern int a;
int main() {
printf("%d\n",sum(1,2));
printf("%d\n",a);
return 0;
}
//正确,可以运行//若为sum和a加上static关键字,在运行源2.cpp时会产生无法解析错误
//源1.cpp
static int sum(int a, int b) {
return a + b;
}
static int a = 10;三.#define定义宏
#define前面被用于定义标识符常量。现在用于定义宏。宏可以用来代替一些简单的函数。
#include <stdio.h>
#define MAX(X,Y) X>Y?X:Y
int main(){
int max=MAX(1,2);
printf("%d\n",max);
return 0;
}更深入的放在之后
四.指针和地址的由来
首先介绍地址的由来。操作系统分为32位和64位。以32位操作系统为例,32位意味着32根地址线。32根地址线意味着有2^32个不同的地址。这些地址对应着唯一确定的内存单元。每一个这样的地址单元为1 byte,这样一来,2^32个内存单元意味着4G的内存。
这就是地址的由来。
下面介绍指针。指针是用来存储地址的变量。指针变量的数据类型可以为:int*, char*, double*等等。指针变量占用内存取决于操作系统类型,64位系统的指针占用8bytes,32位系统的指针占用4bytes。相关的操作符有:&取地址符;*间接访问操作符(解引用操作符)
边栏推荐
- 剑指Offer(十):矩形覆盖
- Dry goods likeshop takeout order system is open source, 100% open source, no encryption
- 剑指Offer(四十三):左旋转字符串
- 抽象工厂及其改进示例
- 少了个分号
- Write to esp8266 burning brush firmware
- 剑指Offer(二十一):栈的压入、弹出序列
- [leetcode每日一题2021/4/29]403. 青蛙过河
- centos8(liunx)部署WTM(ASP.NET 5)使用pgsql
- Issue 8: cloud native -- how should college students learn in the workplace
猜你喜欢

putty的使用教程

码云,正式支持 Pages 功能,可以部署静态页面

Issue 7: how do you choose between curling up and lying flat

Redis Docker实例与数据结构

Comparison of packet capturing tools fiddler and Wireshark

数据分析入门 | kaggle泰坦尼克任务(一)—>数据加载和初步观察

文案秘籍七步曲至----文献团队协作管理

Redis docker instance and data structure

英语基础句型结构------起源

Navicat15连接本地虚拟机的Mysql(Centos7)
随机推荐
第4期:大学生提前职业技能准备之一
el-table实现可编辑表格
json_object_put: Assertion `jso->_ref_count > 0‘ failed.Aborted (core dumped)
[leetcode每日一题2021/2/18]【详解】995. K 连续位的最小翻转次数
Application of.Net open source framework in industrial production
码云,正式支持 Pages 功能,可以部署静态页面
Issue 7: how do you choose between curling up and lying flat
sigmod 函数与softmax 函数对比
[leetcode每日一题2021/4/29]403. 青蛙过河
并行、并发及对于高并发优化的几个方向
C language calculation date interval days
Some cutting-edge research work sharing of SAP ABAP NetWeaver containerization
Okaleido ecological core equity Oka, all in fusion mining mode
C语言计算日期间隔天数
[notes on machine learning] [building a cyclic neural network and its application] deeplearning ai course5 1st week programming(keras)
hx711 数据波动大的问题
关于硕博士开题报告编写的思考
Simple use of json-c Library -- converting JSON files to struct
干货likeshop外卖点餐系统开源啦100%开源无加密
第8期:云原生—— 大学生职场小白该如何学