c语言左移15位,关于c语言中左移右移运算符的问题
参照《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语言中左移右移运算符的问题相关推荐
- c语言10以内位运算,C语言基础知识--位运算
1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...
- 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 ...
- c语言产生32位随机数,C语言,如何产生随机数
1. 基本函数 在C语言中取随机数所需要的函数是: int rand(void); void srand (unsigned int n); rand()函数和srand()函数被声明在头文件stdl ...
- c语言飞机借位,使用c语言实现飞机游戏
在这里,我主要使用scanf函数和printf函数来实现一个简单的飞机游戏,并且通过函数的形式实现. 整体思路:main函数 在这里,主要是使用一个简易的游戏框架,来减小开发游戏时的难度int mai ...
- c语言左边自动补零,c语言左移4,余位补零 时不时乘以16?
c语言左移4,余位补零 时不时乘以16?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言左移4,余位补零 时不时乘 ...
- 单片机c语言或运算,单片机avr c语言位运算 与或非 异或逻辑 运算介绍 详解
位运算是指按二进制位进行的运算.在单片机中位运算通常用于I/O端口的输入输出控制和逻辑判断. C语言提供的位运算符有: 运算符 含义 功能 & 按位与 如果两个相应的二进制位都为1,则该位的结 ...
- C语言代码示范与讲解+C语言编程规范及基础语法+编程实战
上一篇文章:C语言程序设计概述+C语言简介+算法概述 C语言代码示范与讲解+C语言编程规范及基础语法+编程实战 一:代码示范集加讲解 1.C语言第一个代码:打印"This is the fi ...
- java 左移 返回值_java左移右移运算符详解
在阅读源码的过程中,经常会看到这些符号<< ,>>,>>>,这些符号在Java中叫移位运算符,在写代码的过程中,虽然我们基本上不会去写这些符号,但需要明白这些 ...
- C++中左移操作符的重载
文章目录 1 C++中左移操作符的重载 1 C++中左移操作符的重载 我们可以重载左移操作符,将变量或者常量左移到一个对象中! 示例代码: #include <stdio.h>const ...
最新文章
- java 日志 生成器_自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程
- 开发出高性能的网站系列文章
- centos 7安装_VMware Workstation安装centos
- JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十六)利用PC端和移动端BUG
- go get国内解决办法汇总
- 自定义GridView 介绍
- Codeforces Round #223 (Div. 2): E. Sereja and Brackets(线段树)
- 使用傅里叶模态法分析闪耀光栅
- h5难做吗_H5如何制作?制作H5是否很难?-
- ★★★5230打字慢的解决方法...绝对有用...只需要在手机上轻微的设置一下(转)...
- Ubuntu系统死机解决办法
- 郭天祥 十天搞定单片机 (2)流水灯+蜂鸣器+调试
- 常见的计算机专业相关词汇汇总
- python爬取文献资料_Python 批量爬取Web of Science 文献信息数据
- 中心商务区建智慧城市 将现 “芝加哥夜景”
- 数据仓库之数据质量管理
- Big-man的Bootstrap篇(二)
- SAP 标准教材和自学方法 摘自qiangsheng
- Linux内核机制总结内存管理之内存耗尽杀手(二十四)
- 【思维导图】冒险岛职业分类(按职业系、职业群分类)
热门文章
- 在64位windows下使用instsrv.exe和srvany.exe创建windows服务
- mate40pro什么时候用鸿蒙,mate40Pro什么时候可以用鸿蒙
- java足球经理2010下载_apk是什么文件?apk文件怎么打开?
- laravel5.8笔记八:数据库(单库和多库)
- 使用 monitor 命令查看 redis 请求日志
- Bug访问豆瓣403forbidden
- Bootstrap的栅格布局
- java 只显示文本文件_Java设计并实现一个应用程序,能够读取一个文本文件中的内容并显示,同时能够计算出文本中的行数。...
- cta策略 有哪些_【投资理财】基本面拐点已至,当前环境适合配置哪些策略?...
- CI框架json无法Unicode转中文解决方案