目录
二进制的解释:
其实我们常听到的二进制、八进制、十六进制、这样的说法,其实就是数值的不同表现形式。
- 我们可以从10进制中可以推断出,十进制中的每一位都是由0~9的数字组成的
- 10进制中是满10进1的
其实二进制也是一样的道理
- 2进制中是满2进1的
- 2进制中的数字每一位都是由0~1的数字组成的
进制的转换:
2进制转10进制:
如图可见,10进制数字“123” 那么我们也要知道其实每一位数字都是有权重的,10进制的数字从右向左是:个位、十位、百位.........,分别每一位的权重是:10的0次方,10的1次方,10的2次方....。
2进制和10进制是类似的,2进制的权重从右向左是2的0次方,2的1次方,2的2次方....。
因此我们可以这样理解:
10进制转2进制:
由此图可以看出:由下往上依次所得的余数就是10进制转2进制所得出的二进制数字。
2进制转8进制:
8进制的每一位是由0~7的数字组成的,0~7的数字,各写成二进制,最多有3个2进制位就足够了,比如7的2进制位是111,所以在2进制转8进制的时候,从2进制序列中右边低位开始向左每3个2进制位会换算成一个8进制位,剩余不足3个2进制位的直接换算。
如:2进制的01101011,换成8进制:0153,0开头的数组,会被当成8进制数。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
printf("%d\n", 017);
return 0;
}
如图我们可以看出,在编译器中,0开头的数字就会被编译器认为是8进制数字,
如:2进制的“01101011”,换成8进制:0153,0开头的数字,会被编译器当做8进制。
2进制转16进制:
16进制的每一位都是0~9,a~f的,0~9,a~f的数字,各自写成2进制,最多由4个2进制位就足够了,比如f的二进制是:1111所以在2进制转16进制的时候,从2进制序列右边低位开始向左每4个2进制位会换算一个16进制位,剩余不够4个二进制位的直接换算。
如2进制的“01101011”,换成16进制:0x6b,16进制表示的时候前面加0x
原码、反码、补码
整数的2进制表示方法有三种:即:原码、反码、补码
三种表示方法均有符号位和数值位两部分,符号用“0”表示“正”,用“1”表示“负”,而数值位的最高的一位就是符号位,剩余的都是数值位。
正数的 原码 反码 补码 都是相同的。
负数的三种表示方法各不相同。
原码:直接将数值按正负数的形式翻译成二进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就是补码。
整数存放到内存中其实存放的就是补码。
在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统⼀ 处理; 同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
移位操作符:
<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。
左移操作符:
移位规则:抛弃左面,右面补0
右移操作符:
移位规则:右移操作符运算分两种:
1:逻辑右移:左边用0填充,右边丢弃
2:算数右移:左边⽤原该值的符号位填充,右边丢弃
注:对于移位操作运算符,不要移动负数位,这个标准是未被定义的
例:
int num = 10;
num>>-3; //error
位操作符:
按位与“&”
按位与的运算符是这样的:&
运算规则:
两个二进制数进行按位与运算时,同位上两个数同时为1时则为1,不同则为0.
(同1为1,有0为0)
例如:0000 0000 0000 0000 1011 0101 1001 1010 (46490)
与: 0000 0000 0000 1010 0101 1111 1010 1000 (679848)
&后: 0000 0000 0000 0000 0001 0101 1000 1000 (5512)
按位或“|”
按位或的运算符是这样的:“|”
运算规则:
两个二进制数进行按位与运算时,同位上两个数只要有一个为1时则为1,两个数同时为0时为0。
(同0为0,有1为1)
例如: 0000 0000 0000 0000 1011 0101 1001 1010
与: 0000 0000 0000 1010 0101 1111 1010 1000
|后: 0000 0000 0000 1010 1111 1111 1011 1010
异或“^”
异或的运算符是这样的:“^”
运算规则:
两个二进制数进行按位异或运算时,同位上的两个数相同则为0,不同则为1.
(相同为0,不同为1)
例如:0000 0000 0000 0000 1011 0101 1001 1010
与: 0000 0000 0000 1010 0101 1111 1010 1000
^后: 0000 0000 0000 1010 1110 1010 0011 0010
逗号表达式:
exp1,exp2,exp3,.....expN
逗号表达式就是用逗号隔开的多个表达式
逗号表达式,从左向右依次执行,整个表达式的结果就是最后一个表达式的结果。