c语言中的移位运算符能用于浮点型吗_c语言移位运算符与运算用法

c语言中的移位运算符能用于浮点型吗_c语言移位运算符与运算用法      移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。c语言中提供了两种移位运算符:左移运算符:<<右移运算符:>>左移运算符(<<)intmain(void){inta=4;//将a的二进制位向左移动一位intb=a<<1;printf(“%d”,b);return0;}  &n

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

      移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。
c语言中提供了两种移位运算符:
左移运算符:<<
右移运算符:>>

左移运算符(<<)
int main(void)
{ 
   
	int a = 4;
	//把a的二进制位向左移动1位
	int b = a << 1;
	printf("b = %d", b);
	return 0;
}

Jetbrains全家桶1年46,售后保障稳定

     在32位操作系统中,int类型占4个字节,1个字节有8bit,所以变量a在内存中占32个比特位。
将4赋值给变量a,a中存放的是4的二进制形式。
在这里插入图片描述
将a向左移动一位
在这里插入图片描述
最高位的0丢弃,末位补0
在这里插入图片描述
可以看到a左移一位后的结果是1000,转换成10进制就是8,所以打印b的结果就是8。
在这里插入图片描述

右移运算符(>>)
int main(void)
{ 
   
	int a = 10;
	//把a的二进制位向右移动1位
	int b = a >> 1;
	printf("b = %d", b);
	return 0;
}

把10赋值给变量a,将10表示成二进制形式
在这里插入图片描述
将10向右移动一位,最低位的0丢弃
在这里插入图片描述
最高位补0
在这里插入图片描述
最后的结果转换成10进制就是5
在这里插入图片描述
我们可以看到最后打印b的结果确实是5。

这里需要注意的是,右移分为算数右移和逻辑右移
算数右移: 右边丢弃,左边补原符号位
逻辑右移: 右边丢弃,左边补0
内存中存放二进制序列的时候,最高位是0表示正数,最高位是1表示负数。
因为10是正数,所以无论是算数右移还是逻辑右移,最高位都是补0。那么这里的右移运算到底是算数右移还是逻辑右移呢?
整数的二进制表示形式有三种:原码、反码、补码
原码:直接根据数值写出的二进制序列
反码:原码的符号位不变,其他位按位取反
补码:反码加1
计算机内存数值存储方式是补码

int main(void)
{ 
   
	int a = -1;
	//把a的二进制位向右移动1位
	int b = a >> 1;
	printf("b = %d", b);
	return 0;
}

以-1为例
-1的原码:在这里插入图片描述
-1的反码:
在这里插入图片描述
-1的补码:
在这里插入图片描述
因为计算机中存储的是补码,将-1右移1位,最低位的1舍弃
在这里插入图片描述
先来看b的打印结果
在这里插入图片描述
b的值为-1,说明最高位补的是1,此时进行的是算数右移。
需要注意的是,虽然a进行了右移操作,但是a的值是不发生改变的,我们可以将a也打印出来

int main(void)
{ 
   
	int a = 10;
	//把a的二进制位向右移动1位
	int b = a >> 1;
	printf("a = %d\n", a);
	printf("b = %d", b);
	return 0;
}

在这里插入图片描述
a的结果仍然是10。

int a = 10;
int b = a + 1;

和上面的代码是一样的,在进行移位运算的时候,移位对象的值并不会发生改变

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203604.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 树莓派开发环境搭建(树莓派5)

    在本系列文章的第一部分中,我们将在一台树莓派Pi3ModelB上安装并运行一个以太坊区块链客户端。毫无疑问,区块链绝对是当前的热点。之所以会这样,很大程度上是因为比特币以及其他加密货币让很多人一夜暴富。但是,区块链的应用并不仅限于加密货币领域,考虑到其去中心化以及防篡改等特性,区块链技术还可以用到IoT应用中。因此,除了加密货币和安全交易之外,以太坊平台还可以提供一种分布式的计算平台。在这篇…

    2022年4月12日
  • jQuery获取及设置单选框、多选框、文本框内容建议收藏

    获取一组radio被选中项的值varitem=$('input[@name=items][@checked]').val();获取select被选中项的文本varitem=

    2021年12月20日
  • 数据库课程设计——火车票售票系统「建议收藏」

    数据库课程设计——火车票售票系统「建议收藏」火车票预售系统,为购票用户与卖票管理人员之间搭建平台。让用户能够通过该软件对管理人员发布的车次班进行预购与查询,方便旅客的出行。

    2022年5月19日
  • 布隆过滤器原理以及应用_bitmap与布隆过滤器

    布隆过滤器原理以及应用_bitmap与布隆过滤器1.先说下背景,肯定遇到这种情况,判断元素在不在一个集合里面,如果,集合里面的元素非常大,这个判断过程是非常耗时的,而且集合占用空间也很大。2.应用场景,网页黑名单,垃圾邮件过滤,电话黑名单,url去重,内容推荐等。3.原理:布隆过滤器实际上就是一个字节数组,字节数组的值是0或1,在添加元素的时候,对值通过多个hash函数的计算,得到多个0,1然后在字节数组里面在相应的位置设置值。这样处理…

    2022年10月7日
  • PLSQL下载、安装、配置、连接详细教程

    PLSQL下载、安装、配置、连接详细教程常用的几个基本sql: select*fromtablewhere范围 插入:insertintotable(field1,field2)values(value1,value2) 删除:deletefromtablewhere范围 更新:updatetablesetfield=valuewhere范围 查找:select*fromtablewh…

    2022年6月16日
  • JVM 关于静态变量存储位置的问题[通俗易懂]

    JVM 关于静态变量存储位置的问题[通俗易懂]形如staticList<>a=newList<>();我知道a指向的List的对象肯定是在堆内存中,但a本身它存放在哪儿?java8后,永久代已经被移除,被称为“元数据区”的区域所取代。类的元数据放入nativememory,字符串池和类的静态变量放入java堆中,静态变量初始化就在堆,a就在堆中。…

    2022年6月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号