参照《c与指针》,在c语言中左移时,不论算术左移还是逻辑左移效果都是相同的。而且对于有符号和无符号类型执行相同的操作,即按照二进制位向左左移N位。例如:

1 clude

2 intmain()3 {4 int a = 0xafffffff;5 printf("%dn",a<<1);6 int b = 0xff;7 printf("%dn",b<<1);8 }

ubuntu@ubuntu:~/code/2017.8.28$ ./test31610612734

510

int型变量a在内存中转换为2进制储存 1010 1111 1111 1111 1111 1111 1111 1111为一个负整数,b在内存中储存为 0000 0000 0000 0000 0000 0000 1111 1111为一个正整数,程序结果如上。a左移后转化为正整数,b转换为正整数 ,都按2进制左移一位(包括符号位)。

而对于右移来讲,针对不同的编译器,可能会进行算术或逻辑移位。在gcc下进行算术移位,即对于正整数右移,算数移位与逻辑移位相同,右移后左端补0,对于负整数右移,算数移位为符号位1不动,右移后左端补1。

1 #include

2 intmain()3 {4 int a = 0xafffffff;5 printf("%dn",a<<1);6 int b = 0xff;7 printf("%dn",b<<1);8 }

ubuntu@ubuntu:~/code/2017.8.28$ ./test3-671088641

127

a作为负数 右移左端补1,b作为正数右移左端补0,验证了以上结论。

在左移右移中,如果数据类型总位数小于int,则先转化为int再进行移位运算。如果左移或右移位数大于数据类型位数,则先进行对数据类型位数取模,再用余数进行移位运算。

1 #include

2 intmain()3 {4 char a = 0x11;5 //for(i = 0;i < 100;i++)6 //{7 //printf("%dn", a>>i);8 //}

9 printf("%dn", a>>(sizeof(int)*8+3));10 printf("%dn", a>>3);11 printf("%lun", sizeof(a>>3));12 printf("%ldn",sizeof(a)) ;13 }

ubuntu@ubuntu:~/code/2017.8.27$ gcc -o test1 test1.c

test1.c: In function ‘main’:

test1.c:9:21: warning: right shift count >= width of type [-Wshift-count-overflow]

printf("%dn", a>>(sizeof(int)*8+3));^ubuntu@ubuntu:~/code/2017.8.27$ ./test12

2

4

1ubuntu@ubuntu:~/code/2017.8.27$

针对一个char型数据,当打印sizeof(a>>3)时输出为4,说明此时a>>3这个变量为int型。而上边对于a>>3与a>>(32+3)的输出结果相同,同时系统警告移位大于

数据类型宽度,证明了上文结论。

内容来源于网络如有侵权请私信删除

c语言左移15位,关于c语言中左移右移运算符的问题相关推荐

  1. c语言10以内位运算,C语言基础知识--位运算

    1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...

  2. c语言sgoto 标志位,如何在Go中设置TCP数据包的“不分段”标志位?(How to set “don't fragment” flag bit for TCP packet in Go?)...

    如何在Go中设置TCP数据包的"不分段"标志位?(How to set "don't fragment" flag bit for TCP packet in ...

  3. c语言产生32位随机数,C语言,如何产生随机数

    1. 基本函数 在C语言中取随机数所需要的函数是: int rand(void); void srand (unsigned int n); rand()函数和srand()函数被声明在头文件stdl ...

  4. c语言飞机借位,使用c语言实现飞机游戏

    在这里,我主要使用scanf函数和printf函数来实现一个简单的飞机游戏,并且通过函数的形式实现. 整体思路:main函数 在这里,主要是使用一个简易的游戏框架,来减小开发游戏时的难度int mai ...

  5. c语言左边自动补零,c语言左移4,余位补零 时不时乘以16?

    c语言左移4,余位补零 时不时乘以16?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言左移4,余位补零 时不时乘 ...

  6. 单片机c语言或运算,单片机avr c语言位运算 与或非 异或逻辑 运算介绍 详解

    位运算是指按二进制位进行的运算.在单片机中位运算通常用于I/O端口的输入输出控制和逻辑判断. C语言提供的位运算符有: 运算符 含义 功能 & 按位与 如果两个相应的二进制位都为1,则该位的结 ...

  7. C语言代码示范与讲解+C语言编程规范及基础语法+编程实战

    上一篇文章:C语言程序设计概述+C语言简介+算法概述 C语言代码示范与讲解+C语言编程规范及基础语法+编程实战 一:代码示范集加讲解 1.C语言第一个代码:打印"This is the fi ...

  8. java 左移 返回值_java左移右移运算符详解

    在阅读源码的过程中,经常会看到这些符号<< ,>>,>>>,这些符号在Java中叫移位运算符,在写代码的过程中,虽然我们基本上不会去写这些符号,但需要明白这些 ...

  9. C++中左移操作符的重载

    文章目录 1 C++中左移操作符的重载 1 C++中左移操作符的重载 我们可以重载左移操作符,将变量或者常量左移到一个对象中! 示例代码: #include <stdio.h>const ...

最新文章

  1. java 日志 生成器_自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程
  2. 开发出高性能的网站系列文章
  3. centos 7安装_VMware Workstation安装centos
  4. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十六)利用PC端和移动端BUG
  5. go get国内解决办法汇总
  6. 自定义GridView 介绍
  7. Codeforces Round #223 (Div. 2): E. Sereja and Brackets(线段树)
  8. 使用傅里叶模态法分析闪耀光栅
  9. h5难做吗_H5如何制作?制作H5是否很难?-
  10. ★★★5230打字慢的解决方法...绝对有用...只需要在手机上轻微的设置一下(转)...
  11. Ubuntu系统死机解决办法
  12. 郭天祥 十天搞定单片机 (2)流水灯+蜂鸣器+调试
  13. 常见的计算机专业相关词汇汇总
  14. python爬取文献资料_Python 批量爬取Web of Science 文献信息数据
  15. 中心商务区建智慧城市 将现 “芝加哥夜景”
  16. 数据仓库之数据质量管理
  17. Big-man的Bootstrap篇(二)
  18. SAP 标准教材和自学方法 摘自qiangsheng
  19. Linux内核机制总结内存管理之内存耗尽杀手(二十四)
  20. 【思维导图】冒险岛职业分类(按职业系、职业群分类)

热门文章

  1. 在64位windows下使用instsrv.exe和srvany.exe创建windows服务
  2. mate40pro什么时候用鸿蒙,mate40Pro什么时候可以用鸿蒙
  3. java足球经理2010下载_apk是什么文件?apk文件怎么打开?
  4. laravel5.8笔记八:数据库(单库和多库)
  5. 使用 monitor 命令查看 redis 请求日志
  6. Bug访问豆瓣403forbidden
  7. Bootstrap的栅格布局
  8. java 只显示文本文件_Java设计并实现一个应用程序,能够读取一个文本文件中的内容并显示,同时能够计算出文本中的行数。...
  9. cta策略 有哪些_【投资理财】基本面拐点已至,当前环境适合配置哪些策略?...
  10. CI框架json无法Unicode转中文解决方案