C 移位运算
发布日期:2021-06-29 19:23:46
浏览次数:3
分类:技术文章
本文共 1040 字,大约阅读时间需要 3 分钟。
移位运算分为左移(<<)与右移(>>),其中右移又分为逻辑右移与算术右移。三者实现如下:
(1)左移:移出去的位丢弃,空缺位(vacant bit)用 0 填充; (2)逻辑右移:移出去的位丢弃,空缺位(vacant bit)用 0 填充; (3)算术右位:移出去的位丢弃,空缺位(vacant bit)用符号位来填充。以补码 0x10110011 来演示左移、逻辑右移与算术右移。
左移:
逻辑右移: 算术右移: 移位算只能作用于整数,不能作用于浮点数。对于无符号整数与有符号整数,左移操作相同,但右移稍有区别。 (1)对于无符号整数为逻辑右移; (2)对于有符号整数为算术右移。注意, 对于无符号整数,右移必须是逻辑右移。而对于有符号整数,C 语言标准并没有明确定义应该使用哪种类型的右移,但几乎所有的编译器均采用算术右移。
参考如下示例:
////@file: main.c//#include#include int main(){ int a = -1; printf("a=0x%x\n", a); //a=0xffffffff printf("a<<1=0x%x\n", a<<1); //左移,结果为 0xfffffffe printf("a>>2=0x%x\n", a>>2); //算术右移,结果为 0xffffffff unsigned int b=1; printf("b=0x%08x\n", b); //b=0x00000001 printf("b<<1=0x%08x\n", b<<1); //左移,结果为 0x00000002 printf("b>>1=0x%08x\n", b>>1); //逻辑右移,结果为 0x00000000}
编译输出结果:
gcc main.c./a.outa=0xffffffffa<<1=0xfffffffea>>2=0xffffffffb=0x00000001b<<1=0x00000002b>>1=0x00000000
参考文献
[1] 龚奕利,贺莲译.深入理解计算机系统[M].北京:机械工业出版社,2016-11.C2.1.9 C语言中的移位运算.P40-41
转载地址:https://dablelv.blog.csdn.net/article/details/93736619 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月23日 00时25分40秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
typescript 用name作为变量名报错的原因
2019-04-30
TypeScript 变量声明
2019-04-30
typeScript 变量作用域
2019-04-30
TypeScript 运算符
2019-04-30
TypeScript 条件语句
2019-04-30
微信小程序 响应的数据绑定
2019-04-30
微信小程序框架
2019-04-30
微信小程序 场景值
2019-04-30
微信小程序 APP() 的那些事
2019-04-30
python 第一个程序 hello python
2019-04-30
python 注释
2019-04-30
python 变量类型
2019-04-30
Python int() 函数
2019-04-30
scrapy 框架安装
2019-04-30
scrapy 创建项目和新建爬虫
2019-04-30
scrapy 爬取起点中文网的作品分类
2019-04-30
浏览器与服务器建立TCP 连接后是否会在一个 HTTP 请求完成后断开?
2019-04-30
scrapy 爬取起点中文网首页的本周强推作品的详情介绍
2019-04-30
react 基础篇 1 hello React
2019-04-30
react 基础篇 2 创建虚拟DOM的方式
2019-04-30