黑马程序员 《ios零基础教程》 -- 内存剖析 2014-3-26总结
来源:互联网 发布:ecshop源码视频教程 编辑:程序博客网 时间:2024/06/07 21:01
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
今天学习了内存剖析中。
一、内存剖析
1.类型说明符
#include <stdio.h>/* int 4个字节 %d short 2个字节 %d long 8个字节 %ld long long 8个字节 %lld signed 4个字节 unsiged 4个字节 无符号输出 %u */int main(int argc, const char * argv[]){ /* signed和unsigned的区别: signed 最高位要当做符号位 unsigned 最高位不要当做符号位 */ // signed == signed int// signed 有符号:正数、0、负数 signed int a = 10; signed a2 = 10; // unsigned int == unsigned;// unsigned 无符号:0、正数 unsigned int b = 10; unsigned b2 = 10; long unsigned int c3 = 234123; long unsigned c2 = 23345; short unsigned int d = 12934; short unsigned d2 = 3458023; short signed int e = 346234; short signed e2 = 3593; // long == long int// long int a = 194004574894379792343l;// long a2 = 194004574894379792343l; //long long int == long long long long int c = 1940045748943ll;// long long c2 = 1940045748943ll; //short == short int// short int d = 5454;// short d2 = 43434; printf("%lld\n",c); int s = sizeof(short); printf("%d\n",s); return 0;}
2.按位与、按位或、按位异或、按位取反
#include <stdio.h>/* 一、按位与 &:只要对应的两个二进位均为1时,结果位才是1,否则为0 10110100 10100100 ----------- 10100100 1001 0101 ----- 0001 二、按位或 |:只要对应的二个二进位有一个为1时,结果就是1,否则为0 1001 0101 ----- 1101 三、按位异或^:当对应的二进制相异(不相同)时,结果为1,否则为0. 1.相同数值进行异或,结果肯定是0,比如9^9 = 0 1001 1001 -------- 0000 2.交换9^5^6 == 9^6^5 3.任何值跟0进行异或,结果还是原来的数值,9^0 == 9 1001 0000 ------ 1001 4.a^b^a == b 1001 0101 ----- 1100 四、按位取反 ~ ~0000 0000 0000 0000 0000 0000 0000 1001 1111 1111 1111 1111 1111 1111 1111 0110 */int main(int argc, const char * argv[]){ printf("%d\n",9&5); printf("%d\n",9|5); printf("%d\n",~9); printf("%d\n",9^5); return 0;}
3.左移、右移,及其用法
#include <stdio.h>/* 一、左移 << 向左移动,符号位也消失,右边边空出的一位用0补充 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次方 以后要输入如 a * 2的n次方,直接将二进制左移n位,a<<n 右移 >> 向右移动,符号位不变,左边空出的一位用符号位补充 0000 0000 0000 0000 0000 0000 0000 0000 000000 0000 0000 0000 0000 0000 0000 10 8>>1 -> 8/2 == 4 8>>2 -> 8/2的2次方 ==2 8>>n -> 8/2的n次方 以后要输入如 a / 2的n次方,直接将二进制又移n位,a>>n */int main(int argc, const char * argv[]){ // insert code here... printf("Hello, World!\n"); return 0;}
4.练习:
1>用位与&运算符判断变量的奇偶性
//用位与&运算符判断变量的奇偶性#include <stdio.h>int main(int argc, const char * argv[]){ int a = 15; //方法一 if (a%2 == 1) { printf("奇数\n",a%2); }else{ printf("偶数\n",a%2); } //方法二 a%2?printf("奇数\n",a%2):printf("偶数\n",a%2); //方法三 a%2==0?printf("偶数\n",a%2):printf("奇数\n",a%2); //方法四 /* 15:1111 09:1001 14:1110 10:1010 */// a&1 == 1 //奇数// a&1 == 0 //偶数 a&1?printf("奇数\n",a%2):printf("偶数\n",a%2); return 0;}
//两个变量值的互换#include <stdio.h>int main(int argc, const char * argv[]){ int a = 10; int b = 11; // 方法一 int temp; temp = a; a = b; b = temp; //方法二 a = b - a; b = b - a; a = b + a; //方法三 a = a ^ b; // a = 10^11 b = a ^ b; // b = 10^11^11 =10 a = a ^ b; printf("a = %d , b = %d\n", a ,b); return 0;}
3>输出二进制位
#include <stdio.h> /* 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 */ void printBinary(int number);int main(int argc, const char * argv[]){ printBinary(9); return 0;}void printBinary(int number){ //记录现在挪到第几位 //(sizeof(number)*8) - 1 == 31 int temp = (sizeof(number)<<3)-1; while (temp>=0) { int value = number>>temp & 1; printf("%d",value); temp--; //每隔四个数字就空一格 if ((temp+1)%4==0) { printf(" "); } } printf("\n");}
#include <stdio.h>char upper(char c){ /* //思路:如果是小写字母,准换为大写字母,如果是其他数值,返回它本身 方法一: if (c>='a' && c<='z') { //确定范围大小 return c - 32; //在ASCII码表中,大小写字母相差32 }else{ return c; }*/ //方法二: if (c>='a' && c<='z') { return c - 32; } return c;}int main(int argc, const char * argv[]){ char cc = upper('f'); printf("%c\n",cc); return 0;}
5.内存存储细节-ASCII码表
#include <stdio.h>int main(int argc, const char * argv[]){ //ASCII码表中‘A’和‘a’之间的差距是32 //网上搜ASCII码表 //0000 0000 0000 0000 0000 0000 0000 1001 int a = 9; //0100 0001 char c = 'A'; printf("%c\n",c); printf("%d\n",'D'); char c2 = 'A' + 33; printf("%c - %d\n",c2 ,c2); /* ASCII码值 A 65 B 66 C 67 */ // int num = 6; //54 = 32 + 16 + 4 + 2; //0011 0110 char c3 = '6'; printf("%d - %d\n",num , c3); return 0;}
6.char类型的使用注意事项
#include <stdio.h>int main(int argc, const char * argv[]){ //char 类型的错误写法 /* 一、单引号‘’只能括住单字节的字符 char c = '男'; */ /* 二、双引号“”不能括单字符 char c = "A"; */ /* 三、不能没有引号括住, char c = A; */ // char c = 65;// printf("%c\n",c); /* char c = 'A'; switch (c) { case 'A': printf("1\n"); break; //这里不明白,上面的case‘A’执行完成之后应该整个break退出,怎么还会错误// case 65:// printf("2\n");// break; default: printf("3\n"); break; } */ //转义字符的使用 printf("\te\n"); printf("\\\n"); printf("\'\n"); printf("\"\n"); return 0;}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
0 0
- 黑马程序员 《ios零基础教程》 -- 内存剖析 2014-3-26总结
- 黑马程序员 《ios零基础教程》 --函数 2014-3-25总结
- 黑马程序员 《ios零基础教程》 --数组 2014-3-27总结
- 黑马程序员 《ios零基础教程》--字符串 2014-3-28总结
- 黑马程序员 《ios零基础教程》 --指针 2014-3-29总结
- 黑马程序员 《ios零基础教程》 ----switch、while、do while 2014-3-22总结
- 黑马程序员 《ios零基础教程》
- 黑马程序员 《ios零基础教程》--全局和局部变量、结构体、枚举 2014-4-2总结
- 黑马程序员 《ios零基础教程》 --补齐算法、宏定义、typedef、递归 2014-4-20总结
- 黑马程序员 《ios零基础教程》 --基础语法、类和对象 2014-4-21总结
- 黑马程序员 《ios零基础教程》--“三大特性”-封装、继承、多态 2014-4-22总结
- 黑马程序员 《ios零基础教程》--OC语言三大特征及self和super 2014-4-25总结
- 《ios零基础教程》 ----for循环、函数 2014-3-23总结
- 黑马程序员--IOS入学学习--3-函数及内存剖析
- 黑马程序员-IOS-C语言基础-函数及内存剖析
- 黑马程序员 -- IOS C语言 内存剖析1
- 黑马程序员 -- IOS C语言 内存剖析2
- 《ios零基础教程》-- ”Mac OS X的介绍”和一些“基础语法” 2014-3-18总结
- flashbuilder4.5 作为eclipse插件
- 学习IOS开发的第14天
- 阿里巴巴电话面试
- Fragment窗口导航
- vector 删除制定的一个元素
- 黑马程序员 《ios零基础教程》 -- 内存剖析 2014-3-26总结
- 命令模式
- JavaScript程序设计之常用窗口对象
- 无网络状态下CentOS无线网卡驱动安装
- MFC文档视图(四):类之间的调用
- JavaScript常用函数
- 三、线性查找算法,BFPRT 算法 《转》
- BlueScreen
- poj3259( spfa 和 bellman_ford)