五、编程中进制的用法
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 |