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内存剖析相关推荐

  1. go list指针_「GCTT 出品」Go 语言机制之内存剖析

    前序(Prelude) 本系列文章总共四篇,主要帮助大家理解 Go 语言中一些语法结构和其背后的设计原则,包括指针.栈.堆.逃逸分析和值/指针传递.这是第三篇,主要介绍堆和逃逸分析.(译者注:这一篇可 ...

  2. 『Go 语言底层原理剖析』文末送书

    互联网迅猛发展的数十年时间里,不断面领着各种新的场景与挑战,例如大数据.大规模集群计算.更复杂的网络环境.多核处理器引起对于高并发的需求,云计算,上千万行的服务器代码-- 那些成熟但上了年纪的语言没能 ...

  3. c语言增加动态分配的存储空间吗,C语言 关于内存动态分配问题

    全局变量:分配到 内存的静态区. 局部变量(非静态):分配到 内存的动态区.在存储区中称为栈(stack) 临时数据(C允许内存动态分配区域):存放在自由空间区,称为堆区(heap) 内存动态分配 得 ...

  4. lua游戏脚本实例源码_Lua与其他宿主语言交互原理剖析

    Lua与其他宿主语言交互原理剖析 题外话:今天周末,刚好在家有时间就把我这次项目组内部分享的文章贴出来,分享给大家,同时也方便以后自己翻阅. 一. Lua简介 目标:Lua语言本身是用C语言来编写开发 ...

  5. Go语言底层原理剖析

    作者:郑建勋 出版社:电子工业出版社 品牌:博文视点 出版时间:2021-08-01 Go语言底层原理剖析

  6. 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一第1章 C语言与内存1.1 引言...

    本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第1章,第1.1节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"华章计算机&quo ...

  7. C语言的内存分配模型

    C语言的内存分配模型 2008-03-12 19:32 C语言中的内存地址分配模型如下: 说明: 1.程序代码区:存放函数体的二进制代码. 2.全局区数据区:全局数据区划分为三个区域.全局变量和静态变 ...

  8. C语言动态内存相关函数

    C语言动态内存管理函数有4个,分别为malloc,realloc,calloc和free.malloc函数分配一块堆内存:calloc是malloc的变种,功能相同,有细小的差别:realloc修改原 ...

  9. C语音和易语言实现内存补丁

    前言 当程序加了壳,我们就不能在OD里直接修改指令了,因为壳会打乱程序代码,由壳负责恢复,所以我们在OD里修改指令是没有意义的.为了解决这个问题,我们可以使用内存补丁,实际上就是在程序正常运行起来后, ...

最新文章

  1. 1、操作系统基础概念
  2. python 3.x 学习笔记14 (socket_ssh and socket_文件传输)
  3. 使用PHP创建一个REST API(译)
  4. android字符串块,Android字符串进阶之一(特殊字符的输入)
  5. Linux文件权限查看及修改命令chmod,chown
  6. 二十个让你泪流满面的瞬间
  7. 奇怪,有的Python函数或方法调用需要两对括号?
  8. 【动态规划笔记】状压dp:旅行商问题
  9. bat 复制文件夹_新建366个文件夹,你用了2小时,我使用excel与bat命令1分钟搞定...
  10. 学会 配置文件+反射,走遍全球都不怕.
  11. 感悟Microsoft summer Camp 2010
  12. arm交叉编译工具链的选择
  13. 面试官的技巧---如何高效地面试
  14. pytorch drop_last参数
  15. Android 软键盘顶起布局相关
  16. MSP430F149;二、TIMEA
  17. PHP面试要点——MQ消息队列
  18. iphone13 设备类型 DeviceType
  19. 如何在Linux终端中复制和粘贴文本、文件和文件夹。
  20. failed to connect to ‘192.168.199.143:5555‘: Connection refused

热门文章

  1. 面试题9:斐波那契数列
  2. 关于并发数与在线数的概念
  3. UNDO 表空间管理
  4. sdk是什么_海外APP和游戏中最常用SDK排名(截止5月17, 2020)
  5. Spring高级之Spring事务详解(用法、传播行为、隔离级别、只读事务、事务条件)
  6. java提升权限运行_提升代码的运行权限,实现模拟管理员身份的功能
  7. 计算机降序符号,rank函数降序排名
  8. Hystrix 熔断器舱壁模式
  9. Java 算法 理财计划
  10. Java 蓝桥杯 A+B problem