C语言之移位操作符与进制转换详解(保姆级教程)

C语言之移位操作符详解

1 简介

  移位操作符分为左移<< ,右移>> ,在介绍移位操作符之前,我先来介绍一下各进制转换的转换

2 二进制

二进制,八进制,十进制,十六进制是数值的不同表现形式
例如:

15的不同表示形式

1 15的二进制:1111
2 15的八进制:17
3 15的十六进制:F
在进制转换中我们把9之后的数,用a,b,c,d,e,f来表示(大小写都可以)
1 2 3 4 5 6 7 8 9 a b c d e f
十进制:
• 十进制是满十进一
• 十进制的每一位是0~9
二进制:
• 二进制就是满二进一
• 二进制只能由0 1组成

2.1 二进制转十进制

十进制:
在这里插入图片描述

二进制也是相同的道理
在这里插入图片描述

2.2 十进制转二进制

我们来看一个例子
在这里插入图片描述

2.3 二进制转八进制

八进制由0~7的数组成,每3位二进制转换成1位八进制,不够三位的左边补零
例如01101011,就可以化成001,101与011,然后计算二进制的权重值,所以01101011转换成八进制就是0153,在前面加上0表示八进制
在这里插入图片描述

2.4 二进制转十六进制

十六进制由0~9,A ~ F 的数组成,每4位二进制转换成1位十六进制,不够四位左边补零
例如01101011,就可以化成0110与1011,然后计算权重值,所以01101011转换成十六进制就是0x6b,早前面加上0x表示十六进制
在这里插入图片描述

3 原码 反码 补码

• 整数的二进制表示有三种原码 反码 补码
• 有符号整数的三种表⽰⽅法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位
• 符号位0表示正数 1表示负数

正整数的原码 反码 补码都相同
负整数的原码 反码 补码表示方式不同
原码:将数值转换成二进制就得到原码
反码:最高位符号位不变,数值位按位取反就得到反码
补码:反码+1就得到补码
补码得到原码也可以先取反再+1
在这里插入图片描述

4 移位操作符

整型在内存中其实存放是补码,所以我们移动的是补码

<< 左移操作符和 >>右移操作符

TIPS:移位操作符只能对正整数使用

4.1 左移操作符

移动规则:左边抛弃,右边补0

#include <stdio.h>
int main()
{
	int num = 10;
	int n = num << 1;
	printf("num = %d\n", num);
	printf("n = %d\n", n);
	return 0;
}

运行结果:
num = 10
n = 20
num左移之后值不会改变

正整数的原码 反码 补码相同
10的二进制00000000 00000000 00000000 00001010
左边丢弃一个0,右边补一个0
所以左移之后
00000000 00000000 00000000 00010100
转化为十进制为20
由于整型是4个字节,所以整数只有32个比特位,右边补了一个0,那么左边多了一个比特位,这个比特位就会丢失

4.2 右移操作符

移动规则:
右移分为两种:

  1. 逻辑右移:左边补零,右边抛弃
  2. 算术右移:左边补符号位,右边抛弃
    右移是逻辑右移还是算术右移这取决于编译器
    在大部分编译器中,使用的是算术右移
    在VS2022中使用的是算术右移
#include <stdio.h>
int main()
{
	int num = 10;
	int n = num >> 1;
	printf("num = %d\n", num);
	printf("n = %d\n", n);
	return 0;
}

运行结果:
num = 10
n = 5

10的补码:00000000 00000000 00000000 00001010
左边补符号位,右边抛弃
右移之后:00000000 00000000 00000000 00000101
转换为十进制为5

无论是左移还是右移,都只应用与正整数

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

4U247

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

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

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

打赏作者

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

抵扣说明:

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

余额充值