黑马程序员技术交流社区

标题: ios基础第5天续1 [打印本页]

作者: sunyongnan    时间: 2015-8-8 06:30
标题: ios基础第5天续1
上接http://bbs.itheima.com/thread-223129-1-1.html

五、编程中进制的用法

1、代码表示:

二进制:0b或者0B开头、八进制:0开头、十进制:直接写、十六进制:0x或0X开头(最大F)

2、进制的打印输出:

%o:表示输出不带符号八进制整数

%x:表示输出不带符号十六进制整数

%d:表示输出有符号十进制整数

%u:表示输出不带符号十进制整数

注意:二进制不可以直接输出。

有符号与无符号区别:有符号可以有负数表现,如-2

3、进制数的在内存中的表现形式:

都是二进制。一个字节代表一个8位的二进制。占用X个字节,就表示占用8 * X位二进制

六、进制转换

1、二进制与十进制互转:

十进制转二进制:让数一直除2,余数放一边,直到结果出现1为止

二进制转十进制:把所有二进制位是1的对应次方值相加,如:1010是:8 + 2 = 10

2、二进制与八进制互转:

每3个2进制表示一个8进制:因为0b111==01(8进制每位最大是7)

3、二进制与十六进制互转:

每4个2进制表示一个16进制:因为->0b1111==0xF(16进制最大是F)

注意:二进制是各进制转换的中间桥梁

10进制-->2进制-->8进制或16进制

8进制-->2进制-->10进制或16进制

4、补充

     1)任何数的0次方等于1

     2)二进制

     3)十进制转换

          十进制:123 --> 1*100 + 2*10 + 3*1 === 123

          八进制:0123-->1*64 + 2*8 + 3*1 === 83

          十六进制:0x123-->1*256 + 2*16 + 3*1 === 291

    4)二进制与八进制互转

        (1)二进制转八进制(当位数不足时用0补全):0b11111111-->0b  011  111  111 === 0377

        (2)八进制转二进制:0123-->0  1  2  3 === 001  010  011

        (3)二进制转十六进制:0b1111111111-->0011  1111  1111 ===0x3FF

        (4)十六进制转二进制:0x123-->0x  1  2  3 === 0001 0010 0011

    5)综合转换(用二进制间接转换)

         123-->二进制(逢二进一):0b1111011->八进制(逢三进一):0173-->十六进制(逢四进一):0x7B

七、数据取值范围

1、基本数据类型取值范围---超出取值范围数据会定义失败

注意:二进制中有几位有效位,则最大值就是:2的几次方减1

如:长度为3位的二进制最大值是2的3次方-1;因为三位最大为111===7

2、二进制中规定:数据可以分为有符号和无符号(用类型说明符区分)

      1)有符号(signed)用最高二进制位表示正负;0表示整数,1表示负数(signed可以省略)。

      2)无符号(unsigned)数据则最高位不用来表示正负,也就是只有正数无负数

          例如:有符号一个字节数据取值范围是:-128 <--> 127 ;无符号则是:0 <---> 255

3、补充

      1)signed和unsigned只能修饰int型,此时int可以省略

八、类型说明符

1、类型说明符是什么?

是C语言中用来说明某个变量是什么类型的关键字。如:int、float、signed、unsigned等。

2、类型说明符有什么用?

说明一个变量的类型,从而便于区分及优化内容。

3、类型说明符怎么用?

写在要定义的变量名前面就可以了。如:long long count = 0;

4、补充

      1)修饰符能修饰的数据类型:

           signed:能修饰int,%d

           unsigned:能修饰int,%d

           short:能修饰int,%d

           long:能修饰int和double,%ld

           long long:能修饰int,%lld

      2)类型说明符可以累加,如果省略了基本数据类型,那么基本数据类型是int

            unsigned short  //表示无符号的短整型

            unsigned long long  //表示无符号的长长整型

      3)long和short只能修饰基本数据类型

      4)由符号的char类型取值范围是:-128 ~ 127 ;无符号的char类型取值范围是:0 ~ 255

      5)浮点型只有有符号类型,没有无符号类型(最高位是符号位)

九、位运算

1、位运算是什么?

是直接对整数在内存中的二进制位进行操作的方法(只能操作整型数据)

2、位运算有什么用?

直接通过操作二进制的位来实现运算,高效

3、位运算怎么用?

      1)&与运算:对应两个二进位均为1时,结果位才为1,否则为0(有假为假==0)。

      2)|或运算:对应的两个二进位有一个为1时,结果位就为1,否则为0(有真为真==1)。

      3)^异或运算:对应的二进位不同时为1,否则为0(不同为真==1.相同为假==0)。

          注意:(1)相同整数相^的结果是0(2)一个数^另一数两次结果不变(2^3^3 === 3^2^3,结果都是2)(3)整数相^跟顺序无关

      4)~取反运算:对整数a的各二进位进行取反,包括符号位(0变1,1变0,真假互换)

           注意:取反是单目操作符,也就是只操作一个数;取反 == 原数的反值 - 1

      5)<<左移:把整数a的各二进制全部左移n位,高位丢弃(包括符号位),低位补0。

                         左移n位其实就是乘以2的n次方(但移动后符号位变化除外,符号位改变则正负改变),例如3<<3 -->3 * 2e3 = 3 * 8 = 24

      6)>>左移:把整数a的各二进位全部右移n位,符号位不变;高位的空缺是正数补0;是负数最高位是补0或是补1,取决于编译系统的规定。

                         右移n位其实就是乘以2的n次方,例如3 >> 1 -->3 / 2e1 = 3 / 2 = 1






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2