1、左移运算符
格式:a<<b

将a这个数的各二进制位左移b位,要求b必须是非负整数,移动过程中,右边空出的位用0填补,高位左移溢出则舍弃该高位。

2、右移运算符
格式:a>>b

将a这个数的各二进制位右移b位,要求b必须是非负整数,移到右端的低位被舍弃。其中,
①对于无符号数,高位补0;
②对于有符号数,如果采用算术移位,则空出部分用符号位填补,如果采用逻辑移位,则用0填补。

(1)逻辑移位是指逻辑左移和逻辑右移,移出的空位都用0来补。
(2)算术移位就需要分有符号型值和无符号型值

  • 对于无符号型值,算术移位等同于逻辑移位。
  • 而对于有符号型值 ,算术左移等同于逻辑左移,算术右移补的是符号位,正数补0,负数补1。

(在汇编指令中,shl和shr表示逻辑左移和逻辑右移,sal和sar表示算术左移和算术右移。)

b的值相对于32位系统,要求不能超过32位,如果超过了,编译的时候会产生一个警告。

疑问:0x1F从字面上看,好像是一个字节的常量,如果左移8位,那该常量的结果为0还是0x1F00 ? ? ?

⭐⭐⭐答案:

  • 首先,将0x1F常量视为一个32为的常量,即0x0000001F,然后执行移位操作;此时,当移位超过32位,则结果为0。如果是long long修饰,那么视为一个64位的常量。
  • 如果,将0x1F赋值给一个小于等于32位类型的变量,对该变量进行以为操作时,先将变量的内容扩展成一个32位的值,然后执行移位操作(如果左移k位,则移动 k mod 32),等完成后,将32位的值赋值给变量,因为变量的类型不是32位,所以存在裁减。

示例:常量

#include <stdio.h>int main(void)
{printf("%lld\n", ((long long)0x1F)<<32);printf("%d\n", 0x1F<<31);printf("%d\n", 0x80000000);printf("%lld\n", 0x1F<<32);
}/*
运行结果为:
133143986176(0x1F 0000 0000)
-2147483648
-2147483648
0
*/

从左移31和左移32位的结果表明,如果是将0x1F变成64位,那么左移32位就不会变成0。

示例二:变量

#include <stdio.h>int main(void)
{int a = 0x1f;long long b = 0x1F;a <<= 32;  //warning:left shift count >= width of type//a <<= 33;b <<= 32;printf("%lld\n", a);//printf("%lld\n", a);//62 (0x3E)printf("%lld\n", b);
}/*
运行结果:
31(0x1f)
133143986176(0x1F 0000 0000)
*/

参考博客:
[1]:C语言之左移和右移运算符
[2]:C语言左移右移运算符详解
[3]:逻辑移位和算术移位的区别

【C语言】0x1F<<11等于0还是0xF800 ?相关推荐

  1. C语言中判断浮点数是否等于0

    1.C语言中判断浮点数是否等于0: 2.C语言中判断两个浮点数是否相等: float.double分别遵循R32-24,R64-53的标准.他们尾数的位数分别是23.52,即误差在2^-23,2^-5 ...

  2. 为什么我手机的科学计算机算的不对,手机计算器全线阵亡怎么回事 10%+10%为什么等于0.11...

    手机计算器全线阵亡怎么回事?这是OPPO.华为.苹果.小米手机都出现的计算bug,计算"10%+10%"时,居然等于0.11,而不是0.2,那么手机计算器全线阵亡怎么回事?八宝网带 ...

  3. 二进制的前导的零 — C语言【十进制转二进制分大于0,小于0和等于0】

    题目: 计算机内部用二进制来表达所有的值.一个十进制的数字,比如24,在一个32位的计算机内部被表达为00000000000000000000000000011000.可以看到,从左边数过来,在第一个 ...

  4. c语言n1=(n2=(n3=0)),计算机二级C语言考试选择题(带答案)

    C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点.全国计算机等级考试有二级c语言这个考试的项目.2016年的计算机等级考试即将到来了,同学们复习的怎么样了?下面是一份相关的 ...

  5. 有小数点是什么类型_为什么0.1+0.2不等于0.3?原来编程语言是这么算的……

    打开你的 Python,输入「0.1+0.2=」,结果是多少?0.30000000000000004 对不对?为什么结果不是 0.3?本文作者给出了详细的解释. 选自Medium,作者:Parul M ...

  6. Oracle Linux 6.9安装和Oracle 11.2.0.4.0安装及psu补丁升级

    原文有图图https://www.linuxidc.com/linux/2018-09/154218.htm 图文详解在Oracle Linux 6.9安装和Oracle 11.2.0.4.0安装及p ...

  7. Oracle Linux6.9下安装Oracle 11.2.0.4.0及psu补丁升级

    为方便截图,本文操作都在vmware虚拟机上完成. 目录: 1.操作系统安装 2.数据库安装 3.PSU补丁升级卸载 part1 操作系统安装 Oracle (Enterprise) Linux 是一 ...

  8. 【转】:Oracle Linux6.9下安装Oracle 11.2.0.4.0及psu补丁升级

    为方便截图,本文操作都在vmware虚拟机上完成. 目录: 1.操作系统安装 2.数据库安装 3.PSU补丁升级卸载   part1 操作系统安装 Oracle (Enterprise) Linux ...

  9. Oracle Database 11.2.0.1(静默安装)

    http://www.cnblogs.com/ylqmf/archive/2012/04/16/2451211.html 本文档是Oracle Database 11.2.0.1 for RHEL5 ...

最新文章

  1. android shape.xml 文件使用
  2. PHP7不能用string类名,thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法...
  3. Linux 下的动态链接库问题
  4. 2008年夜饭时随手拍的两张照片
  5. matplotlib plt.plot
  6. uva 1611——Crane
  7. php源码自动识别文本中的链接,自动加载识别文件Auto.php
  8. request.cookie[name]的到的过期时间是{0001-1-1 0:00:00}
  9. log4j的使用 20220228
  10. What is Leanstar.cn?
  11. c3p0配置及泄露问题
  12. 逆向分析CrackMe系列——CrackMe003
  13. 电池SOC仿真系列-基于遗传算法的电池参数辨识
  14. c语言位运算负数的实例_负数位运算的右移操作-C语言基础
  15. Chapter2 ROS通信机制----基础篇(Ⅰ)vs配置及通信基础
  16. vue-cli、脚手架创建、eslint、alias别名配置、proxy代理配置、axios、scoped、穿透、媒体查询、12栅格、动态rem、1px边框、移动端事件、300ms延迟问题(六)
  17. Win10系统程序图标上的盾牌怎么去除?
  18. 计算机组成与系统结构——MIPS多周期处理器-7指令
  19. 软件项目任务分解的概念
  20. 一文读懂供应链金融及其衍生产品

热门文章

  1. SPA(单页面web应用)和MPA(多页面web应用)
  2. Windows内存清理----其实是没必要的
  3. 无线路由器的dhcp服务器是什么,路由器dhcp是什么 路由器dhcp服务器如何设置
  4. android 视频插件下载,轻视频动态壁纸插件
  5. 福利群怎么引流?微信群引流技巧
  6. 随心所欲b超工作站图像处理_彩超工作站B超随心所欲XP版超声随心所欲XP版
  7. 我是如何用最简单的前端技术揭示那些灰色产业背后的原理
  8. 0328 - 一日三更
  9. echarts添加基准线
  10. 抖音注册服务器打瞌睡了怎么解决,抖音服务器打瞌睡是什么原因