1进制
二进制 0b前缀 占位符
八进制 0前缀 %0
十进制 %d
十六进制 0x前缀 %x
2基本概念
数码:每一个数据中的每一位数字
数位:数码的位置,从左到右,从0开始数
基数:就是进制
位权:数码*基数的数位次方
例 0b10100111 位权=1*2的一次方
3.进制转换
a.二,八,十六转十进制
b.十进制转二,八,十六
连续除以基数直至商为0,从低到高记录余数
c.二进制、八进制的互相转换
方法:
二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换
成八进制
八进制转换成二进制:用3位二进制数代替每一位八进制数
d.二进制、十六进制的互相转换
方法:
二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),
转换成十六进制
十六进制转换成二进制:用4位二进制数代替每一位十六进制数
4.sizeof运算符(计算变量,常量在内存中的字节数)
int 四字节
float 四字节
double 八字节
char 一字节
使用:
sizeof(数据类型)返回占据多少字节 sizeof(int)
sizeof(变量名) 返回占据多少字节 sizeof(num)
sizeof(常量) 返回占据多少字节 sizeof(10)
注意:char类型常量占据四字节,变量占据一字节。
5.原码,补码,反码
a.原码:最高位表示符号位。
正数在前面加0,负数前面加1(0表示正数,1表示负数)
10的原码 00000000 00000000 00000000 00001010
-8的原码 10000000 00000000 00000000 000001000
b.反码
10的补码 00000000 00000000 00000000 00001010
-8的反码 11111111 11111111 11111111 11110111
c.补码
10的补码 00000000 00000000 00000000 00001010
-8的补码 11111111 11111111 11111111 11111000
总结:一个正数的原码,反码,补码都相等。
一个负数原码不变(但前面加1,且1取反时不变),反码则是原码数值取反,补码是反码的基础上再加1.
补码加减法:
[x+y]补=[x]补+[y]补
计算流程 先将x,y变成补码形式(无论正负)然后相加。
6.按位与运算
位运算指一个二进制数的每一位都参加运算(前提是一个二进制数)
注意:参与位运算的都是二进制的补码,结果也是二进制的补码形式。(结果为正数的补码和原码一致,结果为负数时,要经过变化转成原码)
a.按位与:&
参与按位与的两个二进制数,如果都为一,那么结果也是一。只要一位为0,那么结果为0.
任何数按位与1的结果是:是这个数的最低为。
偶数的最低为是0,奇数的最低位是1。如果结果为0则为偶数,为1则为奇数。
b.按位或 |
参与按位或的二进制数据只要一位为1,那么结果为1.只有两个都为0时结果才为0.
c.按位取反 ~
单目运算符 将二进制数的每一位都取反
d.按位异或 ^
参与按位异或的二进制数如果相同为0,不同为1.
e.按位左移或者右移
<< 左移:参与按位左移的二进制数,向左移动指定的位数,低位不够补0,高位溢出舍弃。
3<<2 00000000 00000000 00000000 00000011
00000000 00000000 00000000 00001100 12
注意:可能改变其正负性,一个数左移n位,就是这个数乘以2的n次方。
>> 右移:参与按位右移,向右相对指定的位数,低位溢出舍弃,高位补符号位。
3>>2 00000000 00000000 00000000 00000011 3
00000000 00000000 00000000 00000000 0
注意:右移不改变正负性,一个数右移n位,就是这个数除以2的n次方。