二进制以及部分操作符详解

       

目录

二进制的解释:

进制的转换:

        2进制转10进制:

10进制转2进制:

                                                        2进制转8进制:

                                                        2进制转16进制:

                                                      原码、反码、补码

移位操作符: 

左移操作符:

 右移操作符:

 位操作符:

按位与“&”

运算规则:

按位或“|”

运算规则:

 异或“^”

运算规则:

逗号表达式:


二进制的解释:

其实我们常听到的二进制、八进制、十六进制、这样的说法,其实就是数值的不同表现形式。

  •         我们可以从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

        逗号表达式就是用逗号隔开的多个表达式

        逗号表达式,从左向右依次执行,整个表达式的结果就是最后一个表达式的结果。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王的创意工坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值