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 = ; // 二进制(0b或者0B开头)
int number2 = 0B1100; // 八进制(0开头)
int number3 = ; // 十六进制(0x或者0X开头)
int number4 = 0xc; // %d以10进制整数的形式输出一个数值
printf("%x\n", number); return ;
}

5.位运算

1.      & 按位与

1>     功能

只有对应的两个二进位均为1时,结果位才为1,否则为0。

2>     举例: 比如9&5,其实就是1001&101=1,因此9&5=1

3>     规律

二进制中,与1相&就保持原位,与0相&就为0 , 可以把固定的位与1相与,就能得到那个位具体存的是什么(实例:与每个位,将以二进制存储的十进制数,从内存中每位读出来)

/*
用位与&运算符判断变量的奇偶性
*/
int main()
{
/*
15: 1111
9: 1001 14: 1110
10: 1010
*/
int a = ; a& == // 奇数
a& == // 偶数 /*
if (a%2) {
printf("奇数\n");
} else {
printf("偶数\n");
}*/ //a%2==0?printf("偶数\n"):printf("奇数\n"); //a%2?printf("奇数\n"):printf("偶数\n"); return ;
}

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 = ;
int b = ;
/* 借助第三方变量
int temp = a;
a = b;
b = temp;
*/ /*
a = b - a;
b = b - a;
a = b + a;
*/ // a^b^a == b // a --> 10^11
// b --> 10
a = a ^ b;
b = a ^ b;
a = a ^ b; printf("a=%d, b=%d\n", a, b);
return ;
}

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 = ;
for (int i=;i>=;i--)
{
int c = a>>i&; printf("%d",c);
if(i%==)
{
printf(" ");
}
}
return ;
} 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;
}


C语言-05内存剖析的更多相关文章

  1. 黑马程序员——C语言基础 内存剖析

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)进制 进制是一种计数的方式,数值的表示形式.有多种进制十进制.二进制 ...

  2. c语言之内存的申请malloc() 和释放free()

    c语言之内存的申请malloc() 和释放free() 1.如何使用 malloc 函数 malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分配多大内存 ...

  3. C语言中内存的申请函数

    C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等. alloca是向栈申请内存,因此无需释放. malloc分配的内存是位于堆中的,并且 ...

  4. JVM内存管理------JAVA语言的内存管理概述

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...

  5. 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域

    [源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...

  6. C语言的内存管理

    C语言的内存管理 转载:http://blog.csdn.net/wind19/article/details/5964090   对于一个C语言程序而言,内存空间主要由五个部分组成代码段(.text ...

  7. (十一)C语言中内存堆和栈的区别

    在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念. 堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认 ...

  8. C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针

    C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针 (1)开辟的内存没有释放,造成内存泄露 (2)野指针被使用或释放 (3)非法释放指针 (1)开辟的内存没有释放.造成内存泄露,以下的样 ...

  9. C语言中内存分配 (转)

    在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重 ...

随机推荐

  1. iOS开发之地图代理不起作用(提示vImage decode failed, falling back to CG path.)

    项目中用到了地图相关的东西,就把曾经的demo搬了出来,结果发现直接执行之前的demo没有问题,在xcode5下新建项目再把代码粘贴过来就会提示 May 5 11:36:21 infomedia-iP ...

  2. String.Format使用方法

    1.作为參数   名称 说明   Format(String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项.   Format(String, ...

  3. C# Attribute(中)——Attribute本质论

      小序:                   上篇里,我们把Attribute“粘”在类的成员方法上show了一把,让Attribute跟大家混了个脸儿熟.中篇里,我们将探讨“究竟什么是Attrib ...

  4. setvbuf

    函数名: setvbuf 用 法: int setvbuf(FILE *stream, char *buf, int type, unsigned size); type : 期望缓冲区的类型: _I ...

  5. 什么是Cocos2d-x

    以下是官方对Cocos2d-x的说明."       Cocos2d-x is an open-source mobile 2D game framework, released under ...

  6. Java基础知识强化之IO流笔记40:字符流缓冲流之特殊功能 [ newLine() / readLine() ]

    1. 字符缓冲流的特殊方法 BufferedWriter: public void newLine():根据系统来决定换行符 BufferedReader: public String readLin ...

  7. MVC1笔记

    /// ///直接返回 字符串的 Action方法,适用于 不需要返回大量 html代码的业务(类似于一般处理程序) /// public string Index() { return " ...

  8. c语言入门经典必背18个程序

    1 . /* 输出 9*9 口诀.共 9 行 9 列, i 控制行, j 控制列. */ #include "stdio.h" main() {int i,j,result; fo ...

  9. php 中json_decode()和json_encode()的使用方法

    1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行 ...

  10. Meta http-equiv属性

    http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...