C语言-05内存剖析
1.进制
1. 二进制
1> 特点:只有0和1,逢2进1
2> 书写格式:0b或者0b开头
3> 使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储
4> 二进制和十进制的互相转换
5> n为二进制位所能表示的数据范围(不考虑负数):0~2的n次方-1
2. 八进制
1> 特点:0~7,逢八进一
2> 书写格式:0开头
3> 八进制和二进制的互相转换
3. 十六进制
1> 特点:0~F,逢十六进一
2> 书写格式:0x或者0X开头
3> 十六进制和二进制的互相转换
4. 总结:
1> Mac中计算器的使用
2> printf以不同进制形式进行输出
#include <stdio.h>/*%d\%i 十进制形式输出整数%c 输出字符%p 输出地址%f 输出小数%o 八进制形式输出整数%x 十六进制形式输出整数*/int main() {// 默认情况下,就是十进制int number = 12;// 二进制(0b或者0B开头)int number2 = 0B1100;// 八进制(0开头)int number3 = 014;// 十六进制(0x或者0X开头)int number4 = 0xc;// %d以10进制整数的形式输出一个数值printf("%x\n", number);return 0; }
5.位运算
1. & 按位与
1> 功能
只有对应的两个二进位均为1时,结果位才为1,否则为0。
2> 举例: 比如9&5,其实就是1001&101=1,因此9&5=1
3> 规律
二进制中,与1相&就保持原位,与0相&就为0 , 可以把固定的位与1相与,就能得到那个位具体存的是什么(实例:与每个位,将以二进制存储的十进制数,从内存中每位读出来)
/*用位与&运算符判断变量的奇偶性*/ int main() {/*15: 11119: 100114: 111010: 1010*/int a = 15;a&1 == 1 // 奇数a&1 == 0 // 偶数/*if (a%2) {printf("奇数\n");} else {printf("偶数\n");}*///a%2==0?printf("偶数\n"):printf("奇数\n");//a%2?printf("奇数\n"):printf("偶数\n");return 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> 规律
l 相同整数相^的结果是0。比如5^5=0 自己进行异或结果为0
l 多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6
| 任何数与0进行异或都是自己
l 因此得出结论:a^b^a = b (相当于 a^a^b ---> 0^b ---> b)
/*使用位异或运算符交换两个变量的值*/ int main() {int a = 10;int b = 11;/* 借助第三方变量int temp = a;a = b;b = temp;*//*a = b - a;b = b - a;a = b + a;*/// a^b^a == b// a --> 10^11// b --> 10a = a ^ b;b = a ^ b;a = a ^ b;printf("a=%d, b=%d\n", a, b);return 0; }
4. ~ 取反
对整数a的各二进位进行取反,符号位也取反(0变1,1变0) 负数在内存中的存储细节要联系 原码 反码 补码的知识
5. << 左移
l 把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方
l 由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性
| 可以快速的算出某个数的 2的n次方
0000 0000 0000 0000 0000 0000 0000 0000
00 0000 0000 0000 0000 0000 0000 100100
9<<1 -> 9 * 2的1次方 == 18
9<<2 -> 9 * 2的2次方 ==36
9<<n -> 9 * 2的n次方
6. >> 右移
l 把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方
l 为正数时, 符号位为0,最高位补0
l 为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定
0000 0000 0000 0000 0000 0000 0000 0000
000000 0000 0000 0000 0000 0000 0000 10
111111 1111 1111 1111 1111 1111 1111 10
8>>1 -> 8/2 == 4
8>>2 -> 8/2的2次方 == 2
8>>n -> 8/2的n次方
//使用位运算 将十进制转为二进制 #include <stdio.h> int main() {int a = 10;for (int i=31;i>=0;i--){int c = a>>i&1;printf("%d",c);if(i%4==0){printf(" ");}} return 0;} 6.char
char upper(char c) {// 如果是小写字母,就转成大写/*if (c>='a' && c<='z') { // ['a', 'z']return c - ('a'-'A');} else {// 如果不是小写字母,返回字母本身return c;}*/// 如果是小写字母,就转成大写if (c>='a' && c<='z') { // ['a', 'z']return c - ('a'-'A');}// 如果不是小写字母,返回字母本身return c; }
转载于:https://www.cnblogs.com/iedo/p/5032160.html
C语言-05内存剖析相关推荐
- go list指针_「GCTT 出品」Go 语言机制之内存剖析
前序(Prelude) 本系列文章总共四篇,主要帮助大家理解 Go 语言中一些语法结构和其背后的设计原则,包括指针.栈.堆.逃逸分析和值/指针传递.这是第三篇,主要介绍堆和逃逸分析.(译者注:这一篇可 ...
- 『Go 语言底层原理剖析』文末送书
互联网迅猛发展的数十年时间里,不断面领着各种新的场景与挑战,例如大数据.大规模集群计算.更复杂的网络环境.多核处理器引起对于高并发的需求,云计算,上千万行的服务器代码-- 那些成熟但上了年纪的语言没能 ...
- c语言增加动态分配的存储空间吗,C语言 关于内存动态分配问题
全局变量:分配到 内存的静态区. 局部变量(非静态):分配到 内存的动态区.在存储区中称为栈(stack) 临时数据(C允许内存动态分配区域):存放在自由空间区,称为堆区(heap) 内存动态分配 得 ...
- lua游戏脚本实例源码_Lua与其他宿主语言交互原理剖析
Lua与其他宿主语言交互原理剖析 题外话:今天周末,刚好在家有时间就把我这次项目组内部分享的文章贴出来,分享给大家,同时也方便以后自己翻阅. 一. Lua简介 目标:Lua语言本身是用C语言来编写开发 ...
- Go语言底层原理剖析
作者:郑建勋 出版社:电子工业出版社 品牌:博文视点 出版时间:2021-08-01 Go语言底层原理剖析
- 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一第1章 C语言与内存1.1 引言...
本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第1章,第1.1节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"华章计算机&quo ...
- C语言的内存分配模型
C语言的内存分配模型 2008-03-12 19:32 C语言中的内存地址分配模型如下: 说明: 1.程序代码区:存放函数体的二进制代码. 2.全局区数据区:全局数据区划分为三个区域.全局变量和静态变 ...
- C语言动态内存相关函数
C语言动态内存管理函数有4个,分别为malloc,realloc,calloc和free.malloc函数分配一块堆内存:calloc是malloc的变种,功能相同,有细小的差别:realloc修改原 ...
- C语音和易语言实现内存补丁
前言 当程序加了壳,我们就不能在OD里直接修改指令了,因为壳会打乱程序代码,由壳负责恢复,所以我们在OD里修改指令是没有意义的.为了解决这个问题,我们可以使用内存补丁,实际上就是在程序正常运行起来后, ...
最新文章
- 1、操作系统基础概念
- python 3.x 学习笔记14 (socket_ssh and socket_文件传输)
- 使用PHP创建一个REST API(译)
- android字符串块,Android字符串进阶之一(特殊字符的输入)
- Linux文件权限查看及修改命令chmod,chown
- 二十个让你泪流满面的瞬间
- 奇怪,有的Python函数或方法调用需要两对括号?
- 【动态规划笔记】状压dp:旅行商问题
- bat 复制文件夹_新建366个文件夹,你用了2小时,我使用excel与bat命令1分钟搞定...
- 学会 配置文件+反射,走遍全球都不怕.
- 感悟Microsoft summer Camp 2010
- arm交叉编译工具链的选择
- 面试官的技巧---如何高效地面试
- pytorch drop_last参数
- Android 软键盘顶起布局相关
- MSP430F149;二、TIMEA
- PHP面试要点——MQ消息队列
- iphone13 设备类型 DeviceType
- 如何在Linux终端中复制和粘贴文本、文件和文件夹。
- failed to connect to ‘192.168.199.143:5555‘: Connection refused