进制转换
二进制 逢二进一
自答胡己归零 前面进一位
十进制:12
二进制:1100(逢二进一)
八进制:14(逢八进一)
十六进制 :(逢十六进一)
表示二进制 0b
八进制 0
十六进制 0x
输出 八进制%o 十六进制 %x
二进制转十进制
从低位数开始,用低位数乘以2的多少次幂,幂数从0开始,然后在相加
二进制 :1001
1 2(0)=1
0 2(1)=0
0 2(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 = ?
规律:任何一个数异或上同一个数量两次,结果不变
9 5 5 = ?
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};
//注意:如果没有对数组进行初始化(完全和部分),那么不要随便使用数组中的数据,可能是一段垃圾数据(随机值)
//注意:定义数组的时候,数组的元素不能使用变量,如果使用变量,那么数组中是一些随机值