IOS开发知识(八)

  1. 进制
  1. 什么是进制
  • 是一种计数的方式,数值的表示形式

数一下方块的个数

汉字:十一   十进制:11  二进制:1011  八进制:13

  • 多种进制:十进制、二进制、八进制、十六进制。也就是说,同一个整数,我们至少有4种表示方式
  • 软件开发,肯定要了解这个
  1. 二进制
  2. 特点:只有0和1,逢2进1
  3. 书写格式:0b或者0b开头
  4. 使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储
  5. 二进制和十进制的互相转换
  6. n为二进制位所能表示的数据范围(不考虑负数):0~2的n次方-1
  1. 八进制
  2. 特点:0~7,逢八进一
  3. 书写格式:0开头
  4. 八进制和二进制的互相转换
  1. 十六进制
  2. 特点:0~F,逢十六进一
  3. 书写格式:0x或者0X开头
  4. 十六进制和二进制的互相转换
  1. 总结
  2. Mac中计算器的使用
  3. printf以不同进制形式进行输出
  1. 习题

1> 判断下列数字是否合理

00011   0x0011  0x7H4  10.98  0986  .089  -109

+178    0b325  0b0010   0xFFdc  96f  96.0f   96.0F

-.003    15.4e6  10e8.7  7.6e-6

2> 分别写出它们的十进制、八进制、十六进制

0b0011 1101      0b0111 1011

3> 写出它们的二进制

67   056  0x004f

  1. 变量的内存分析

研究变量在内存中的具体存储情况

  1. 字节和地址

为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”。

  1. 内存以“字节为单位”
  1. 不同类型占用的字节是不一样的
  1. 变量的存储
  2. 所占用字节数跟类型有关,也跟编译器环境有关
  1. 变量实例

int b = 10;

int a = 134;

  • 内存由大到小寻址
  • 只存储二进制形式
  • 每个变量都有地址:第一个字节的地址就是变量的地址
  1. 查看内存地址的两种方式:%x和%p
  2. 查看整数的二进制形式

// 输出整数的二进制形式

void putBinary(int n)

{

int bits = sizeof(n) * 8;

while (bits-->0) {

printf("%d", n>>bits&1);

if (bits%4==0) printf(" ");

}

printf("\n");

}

  1. 负数在内存中的存储
  2. 一个字节的取值范围
  3. 负数的表示形式
  4. 原码、反码、补码
  1. 取值范围
  1. 习题

写出下列变量在内存中的存储情况

int a = 134;

int b = 0;

int c = -10;

  1. 类型说明符
  1. short和long
  • 100l和100ll和100的区别
  • long和long long的输出
  • 不同类型所占用的存储空间

1> short和long可以提供不同长度的整型数,也就是可以改变整型数的取值范围。在64bit编译器环境下,int占用4个字节(32bit),取值范围是-231~231-1;short占用2个字节(16bit),取值范围是-215~215-1;long占用8个字节(64bit),取值范围是-263~263-1

2> 总结一下:在64位编译器环境下,short占2个字节(16位),int占4个字节(32位),long占8个字节(64位)。因此,如果使用的整数不是很大的话,可以使用short代替int,这样的话,更节省内存开销。

3> 世界上的编译器林林总总,不同编译器环境下,int、short、long的取值范围和占用的长度又是不一样的。比如在16bit编译器环境下,long只占用4个字节。不过幸运的是,ANSI \ ISO制定了以下规则:

  • short跟int至少为16位(2字节)
  • long至少为32位(4字节)
  • short的长度不能大于int,int的长度不能大于long
  • char一定为为8位(1字节),毕竟char是我们编程能用的最小数据类型

4> 可以连续使用2个long,也就是long long。一般来说,long long的范围是不小于long的,比如在32bit编译器环境下,long long占用8个字节,long占用4个字节。不过在64bit编译器环境下,long long跟long是一样的,都占用8个字节。

5> 还有一点要明确的是:short int等价于short,long int等价于long,long long int等价于long long

  1. signed和unsigned

1> 首先要明确的:signed int等价于signed,unsigned int等价于unsigned

2> signed和unsigned的区别就是它们的最高位是否要当做符号位,并不会像short和long那样改变数据的长度,即所占的字节数。

  • signed:表示有符号,也就是说最高位要当做符号位,所以包括正数、负数和0。其实int的最高位本来就是符号位,已经包括了正负数和0了,因此signed和int是一样的,signed等价于signed int,也等价于int。signed的取值范围是-231 ~ 231 - 1
  • unsigned:表示无符号,也就是说最高位并不当做符号位,所 以不包括负数。在64bit编译器环境下面,int占用4个字节(32bit),因此unsigned的取值范围是:0000 0000 0000 0000 0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111 1111 1111,也就是0 ~ 232 - 1
  1. 位运算
  1. & 按位与
  2. 功能

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

  1. 举例: 比如9&5,其实就是1001&101=1,因此9&5=1
  2. 规律
  • 二进制中,与1相&就保持原位,与0相&就为0
  1. | 按位或
  2. 功能

只要对应的二个二进位有一个为1时,结果位就为1,否则为0。

  1. 举例: 比如9|5,其实就是1001|101=1101,因此9|5=13
  1. ^ 按位异或

1> 功能

当对应的二进位相异(不相同)时,结果为1,否则为0。

2> 举例: 比如9^5,其实就是1001^101=1100,因此9^5=12

3> 规律

  • 相同整数相^的结果是0。比如5^5=0
  • 多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6
  • 因此得出结论:a^b^a = b
  1. ~ 取反

对整数a的各二进位进行取反,符号位也取反(0变1,1变0)

  1. << 左移
  • 把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方
  • 由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性
  1. >> 右移
  • 把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方
  • 为正数时, 符号位为0,最高位补0
  • 为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定
  1. 习题
  2. 在不用引入其他变量的情况下,使用位异或^运算符实现两个变量值的互换
  3. 使用位与&运算符变量的奇偶性
  4. 编写一个函数,用来输出整数在内存中的二进制形式
  1. char类型
  1. 存储细节

ASCII单字节表(双字节GBK\GB2312\GB18030\Unicode)

  1. 常见错误

char c = A;

char c = "A";

char c = ‘ABCD‘;

char c = ‘男‘;

  1. 当做整型使用

在-128~127范围内,可以当做整数来用

  1. %c%d\%i的使用

printf(“%d”, ‘A’);

printf(“%c”, 68);

  1. 转义字符
  2.  
  1. 习题
  2. 编写一个函数,将小写字母转为大写
  3. 说出程序的输出结果

int main()

{

int i = 67 + ‘4‘;

char c = ‘c‘ - 10;

printf("%d - %c\n", i, i);

printf("%d - %c\n", c, c);

return 0;

}

时间: 2024-10-22 09:43:03

IOS开发知识(八)的相关文章

从零开始学ios开发(八):Autorotation and Autosizing

不好意思,这一篇间隔的时间有点长,最近实在是事情太多,耽搁了,好了,长话短说,下面继续学习ios. 这次学习的内容是Autorotation和Autosizing,Autorotation就是屏幕内容自动旋转,因为iphone有重力感应系统(陀螺仪???),屏幕的内容会随着用户手握iphone的方式(竖着握Portrait.横着握Landscape)而改变,这个相信大家都已经有所体会,Autosizing是指当iphone的屏幕旋转后,屏幕里面控件的大小和位置也会自动改变.好了,下面跟着例子继续

ioS开发知识(三十八)

ioS开发知识(二十八)

IOS开发知识(七)

进制 什么是进制 是一种计数的方式,数值的表示形式 数一下方块的个数 汉字:十一   十进制:11  二进制:1011  八进制:13 多种进制:十进制.二进制.八进制.十六进制.也就是说,同一个整数,我们至少有4种表示方式 软件开发,肯定要了解这个 二进制 特点:只有0和1,逢2进1 书写格式:0b或者0b开头 使用场合:二进制指令\二进制文件,变量在内存中就是二进制存储 二进制和十进制的互相转换 n为二进制位所能表示的数据范围(不考虑负数):0~2的n次方-1 八进制 特点:0~7,逢八进一

IOS开发知识(一)

关键字 什么是关键字 关键字就是C语言提供的有特殊含义的符号,也叫做"保留字" C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义 auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof vo

IOS开发知识(六)

什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为"函数".所以,你可以说C语言程序是由函数构成的. 比如你用C语言编写了一个MP3播放器程序,那么它的程序结构如下图所示: 函数的定义 定义函数的目的 将一个常用的功能封装起来,方便以后调用 定义函数的步骤 函数名:函数叫什么名字 函数体:函数是干啥的,里面包含了什么代码 格式 固定格式(很多语言的函数都是这么写的) 返回值类型  函数名(形式参数列表) { 函数体

iOS开发-UI (八)TableView

知识点: 1.UITableView使用 2.UITableView分段功能 3.UITableViewCell重用机制 ======================= UITableView使用 1.UITableView作用 2.UITableView创建 - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style; UITableViewStyle: UITableViewStylePlain       列表模式 UIT

ioS开发知识(三十四)

ioS开发知识(三十五)