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