C 语言中的左移和右移运算

C 语言中的左移和右移运算 (>> 和 <

1、各种数据格式(整型int ,字符型 char 等)占有几个存储单元(不同的编译器有所不同)

在TC2.0和keil中:(也是ANSI的标准)

char占有1个字节(即8位二进制数)。unsigned char类型的变量,最大值为Oxff (十

六进制), 255 (十进制)

int占有2个字节(即16位二进制数)。unsigned int类型的变量,最大值为Oxffff (十六

进制), 65535 (十进制)

long int 占有 4 个字节

folat 占有 4个字节, long float 和 double 都占有 8个字节, long double 占 16 个字节

在VC++中:

char 占有 1 个字节, int 和 float 占有 4 个字节, double 占有 8 个字节

2、逻辑左移 /右移和算术左移 / 右移的区别(这两种位运算,仅适用于整型和字符型。对实数型 格式的数据不适用)

逻辑左移:丢弃最低位,移 1 位,得: 0111 11110 补最高位。 (假设仅左移1

逻辑左移:丢弃最低位,

移 1 位,得: 0111 1111

0 补最高位。 (假设仅左移

1 位)二进制数:

1111 1111 逻辑左

逻辑右移:丢弃最高位,

移 1 位,得: 1111 1110

0 补最低位。 (假设仅右移

1 位)二进制数:

1111 1111 逻辑左

算术左移:以保持符号位不变为基础,进行逻辑左移1000 1111

算术左移:以保持符号位不变为基础,进行逻辑左移

1000 1111 得: 1100 0111

假设仅左移 1 位)二进制数:

算术右移:以保持符号位不变为基础,进行逻辑右移假设仅右移

算术右移:以保持符号位不变为基础,进行逻辑右移

假设仅右移 1 位)二进制数:

1000 1111 得: 1001 1110

好了,进入正题: (分无符型和有符型进行讨论)

以下结果,是通过 VC++6.0 调试的( char 占 1 字节, int 占 4 字节)

需要注意的一点是: 计算里的运算都是通过二进制补码进行的, 所以在对两个操作数进行运算时, 要先将它们转化成补码形式。

1、无符型情况unsigned char 和 unsigned int

(以 unsigned char 型为例, unsigned int 型情况相同)

>> 右移

unsigned char i=0x99;// 二进制数补码形式为: 1001 1001

i=i>>1;

printf("ni=0x%xn",i);//%x 是指,运行的结果以十六进制的形式显示

程序运行结果:

i=0x4c;即卩 0100 1100

<< 左移

i=0x99;

i=<<1;

程序运行结果:

i=0x32;即 0011 0010

2、有符型char 和 int

左移 <<

char i= - 9;//i 的二进制原码: 1000 1001 补码: 1111 0111

char y=-0x49;i=i<<1;//y 的二进制原码: 1100 1001 补码: 1011 0111

char y=-0x49;

i=i<<1;

// 经逻辑左移后, i 的补码: 1110 1110 (是个

j=j<<1;(十进制)// 经逻辑左移后,j 的补码 :0001 0011 (是个正数,原码和补码一样)即18x=x<<1;// 经逻辑左移后,

j=j<<1;

(十进制)

// 经逻辑左移后,

j 的补码 :0001 0011 (是个正数,原码和补码一样)即

18

x=x<<1;

// 经逻辑左移后,

x 的补码 :1001 0010 (是个负数,需再求其补) ,得原码:

1110 1110 即 -110 (十进制)

y=y<<1; // 经逻辑左移后, y 的不码 :0110 1110 (是个正数,原码和补码一样)即 110 (十进制)

printf("i=%dnj=%dnx=%dn",i,j,x);

程序运行结果:

i= - 18;

j=18;

x= - 110;

y=110;

在 C 语言中, VC++6.0 环境下:

对一个数进行位移操作,就是对它的补码进行逻辑位移操作

如果这个数是无符型,则逻辑操作的结果就是它的最终位运算结果;

如果这个数是有符型, 则还需对个逻辑操作的结果进行一次取补, 取补后的结果方为最终运算结 果。

补充说明:

1、如果位移动的数目大于

c语言的左移运算,C语言中的左移和右移运算.docx相关推荐

  1. C语言问题,在位运算中,操作数每右移一位,其结果相当于什么?若左移1位,其结果相当于什么?

    C语言问题,在位运算中,操作数每右移一位,其结果相当于什么?若左移1位,其结果相当于什么? 答案: 右移,除以2   左移,乘以2 比如5,5的二进制表示是101那么右移一位之后是10就是2了,是整除 ...

  2. C语言之负数的左移/右移运算

    文章目录 前言 一.针对负数的左移运算 二.针对负数的右移运算 前言 在实际上的开发中,很少碰到针对负数的移位操作,基本上都是无符号整数即unsigned int类型.但有时候在笔试或者面试中,有可能 ...

  3. C语言中的左移与右移[转]

    先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如: int i = 1; i = i << 2; //把i里的值左移2位 也就是说,1的2进制是00 ...

  4. C语言中的左移与右移

    原文地址http://www.cnblogs.com/myblesh/articles/2431806.html 先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例 ...

  5. 单片机c语言左移的作用,单片机c语言中的左移右移

    // 据说有些编译器采用逻辑右移,即左端补0 结果:a = 0xe3 (11100011) 1当左移移出的是"1"而不是0时,你该怎么想? 2 当左移的操作数是一个sign型是,你 ...

  6. c 语言中 的左移右移

    先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如: int i = 1; i = i << 2;  //把i里的值左移2位 也就是说,1的2进制是0 ...

  7. c语言相反数补码,C语言中补码的整数运算特性

    前言 本篇博客以"SSD6-Exercise2-Data Lab: Manipulating Bits"为例,分析在对C语言中的整数采用补码(two's-complement)编码 ...

  8. 单片机c语言左移的作用,[转载]单片机c语言中的左移右移

    单片机c语言中的左移右移 左移 变量1 << 变量2 将变量1的二进制位值向左移动由变量2所指定的位数. 例如: a = 0x8f; // 10001111 a << 2; / ...

  9. c语言负数左移右移_C语言里的左移和右移运算

    C语言里的左移和右移运算 先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用运算符.例如:int i = 1;i = i 2; /把i里的值左移2位也就是说,1的2进制是000.0001(这 ...

最新文章

  1. 职场协同办公如何使用硬技能,助推团队协作更流畅?
  2. PXE自动化安装系统
  3. [csdn markdown]使用摘记一源码高亮及图片上传和链接
  4. 明天面腾讯,我刷了这71道面试题...
  5. lisp正负调换_坐标提取lisp程序
  6. c语言 行程长度编码,C语言编程题,求大佬帮助,关于数组的。
  7. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理
  8. asp.net 缓存Cache的使用总结
  9. 如何制作万有特性曲线图
  10. 使用SpringCloud实现Java分布式开发【part-2】:Ribbon负载均衡的介绍及使用方式
  11. Kubernets k8s中yml格式与pod yml格式
  12. UTAU中文版安装教程
  13. 颈椎病的康复锻炼方法
  14. DW-概率统计打卡task01
  15. pubg:您的客户端将在10秒内关闭,因为一个关键的防作弊进程没有正确运行。通过验证您的游戏文件的完整性来解决此问题....
  16. 宇信科技有限公司面试题目
  17. 车牌识别matlab,车牌识别matlab实现(蓝色车牌和新能源车牌)
  18. 9个你需要知道的PHP函数和功能
  19. python排序获得秩 (index)
  20. 新特性解读 | MySQL 8.0 对 GTID 的限制解除

热门文章

  1. php各种主流框架的比较
  2. CSS3 变形 过渡 动画
  3. 从洲际比赛到奥运会,华为服务器还将有更大一跃
  4. 【Kotlin的三目运算】
  5. oracle轮训查询,道路客运管理信息系统
  6. 硬盘第一个基本分区c 的 ntfs格式的XP上 安装 windows和linux 双引导 设置grub(安装WINGRUB),
  7. java 区分中英文,Java 区分文本中的中英文字符函数
  8. 北京交通大学软件学院保研面经
  9. 安卓集合和数组互相转换
  10. html哪些标签可以用在制作列表中,用HTML列表标签ul、ol和dl制作菜单