进制转换

2016-01-09  本文已影响281人  MarkTang

二进制 逢二进一
自己归零 前面进一位

十进制:12
二进制:1100(逢二进一)
八进制:14(逢八进一)
十六进制 :(逢十六进一)

表示二进制 0b
八进制 0
十六进制 0x

输出 八进制%o 十六进制 %x

二进制转十进制

从低位数开始,用低位数乘以2的多少次幂,幂数从0开始,然后在相加

二进制 :1001
12(0)=1
0
2(1)=0
02(2)=0
1
2 (3)= 8

1 2 4 8 16 32

二进制转八进制

三个二进制代表一个八进制位 ,将三个二进制位转换十进制,算出后三位的相加,之后再相连

二进制转十六进制

四个二进制位掉膘一个十六进制,只需要将4个二进制转换为10进制,之后再相连

十进制转 二进制
除2取余 倒序取出

N位二进制的取值范围
1位: 0~1 0~2(n)-1;
2位 :0~3 0~2(2)-1;
3位:0~7 0~2(3)-1;

源码 反码 补码
存在内存中的是补码

正数三码合一 一样的

负数

源码
1000 0000 0000 0000 0000 0000 0000 1001
反码:符号位不变,其他位去反(0变 1 1变0)
1111 1111 1111 1111 1111 1111 1111
0110
补码: 反码 +1
1111 1111 1111 1111 1111 1111 1111
0111

为什么要有原码/补码/反码?
计算机只会做加法

1 - 1 ==1+(-1)
0000 0001原码(反码) 1000 0001

将计算出来的反码转换为原码,再将原码转换为十进制
1000 0000 == 反码 == -1

1 - 1 ==1+(-1)
0000 0001 (+1补码)
1111 1111 (-补码)
—————————
(1) 0000 0000 == 0 最前面的1 舍去

位运算

& 按位与
|按位或
^ 按位异或
~ 取反

按位与 &
9& 5 =?
按二进制运算
规律:一假则假 1 真 0假
1001
& 0101
———
0001 == 1
规律:任何数和1相& 结果还是那个数
1001
& 1111
————
1001

按位|
规律: 一真则真

9| 5 = ?
1001
| 0101
————
1101 ==13

按位异或^
规律: 不相同位1,相同位0
9^ 5 = ?
1001
^ 0101
—————
1100 == 12

重点:
规律:异或的结果和参与运算的顺序没有关系
9^ 5^6 = ?
5^ 9 ^ 6 =?
规律:两个相同的数异或 等于0
5^5 = ?
6^6 = ?

规律:任何一个数异或上0结果不变

9 ^ 0 = ?
6 ^0 = ?

规律:任何一个数异或上同一个数量两次,结果不变
955 = ?
5^ 9^5 = ?

取反 ~

原码 —》 反码(取反) —》补码(+1)
补码 —》反码(-1)—》源码(取反)

正数取反+1的负数
负数取反-1的正数

左移 <<
右移 >>

规律:左移就是左移的数乘以2的移动次幂
注意点:
由于左移运算,被移动的数的最高位会被抛弃(移除),所以左移可能会改变一个数的正负性
9<<1 = ?
0000 0000 0000 0000 0000 0000 0000 1001

右移 >>

9>>1 =?
规律:右移就是右移的数除以2的移动次幂
9 >>1 == 9/2(1) =4
9>>2 == 9/2(2) ==2

符号位不变 后面开始移动 根据符号位 补 1 或零
内存储存细节

内存储存细节
只要定义变量,系统就会开辟一块内存空间,内存寻址从大到下
,越先定义的变量,内存地址越大。
变量的得知就是所占的存储空间最小的字节地址
注意:由于内存寻址是从大到小,所以存储书记也是从大到小的存储(先储存)

类型说明符

1.说明长度的(它可以用于修改所三用的存储空间的大小)
sgort;
long;
long long;
用于说明数据类型,一般情况下和int配合使用
输出需要 long (%li %ld) short (%hi %hd)

2.说明符号位(它可以修改符号位)

unsigned;
signed;

//如果给变量加上修饰符signed,代表当前变量的取值可以是整数/负数/零
//如果给变量加上修饰符signed,就代表把二进制的最高位作为符号位
//而且默认情况下所有变量都是右符号的(signed)
signed int num = 0

//unsigned代表物符号,无符号。无符号就代表当前的取值只能装整数/零
//如果给变量加上修饰符unsigned,就代表“不”把而精致最高最为符号位
//如果想打印无符号的变量,只能用 %u

//不同类型的说明符可以混合使用

数组基本概念

数组完全初始化
int score[3] = {1,3,5};
数组部分初始化
int scores[3] = {3,5};

//注意:如果没有对数组进行初始化(完全和部分),那么不要随便使用数组中的数据,可能是一段垃圾数据(随机值)
//注意:定义数组的时候,数组的元素不能使用变量,如果使用变量,那么数组中是一些随机值

上一篇下一篇

猜你喜欢

热点阅读