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次方。