C 移位运算

C 移位运算移位运算分为左移 lt lt 与右移 gt gt 包含逻辑移位 logicalshift 和算术移位 arithmeticsh 二者区别如下 1 逻辑移位 移出去的位丢弃 空缺位 vacantbit 用 0 填充 2 算术移位 移出去的位丢弃 空缺位 vacantbit 用符号位来填充 移位算只能作用于整数 不能作用于浮点数 对于无符号整数与有符号整数 左移

以补码 0x 来演示左移、逻辑右移与算术右移。

注意, 对于无符号整数,右移必须是逻辑右移。而对于有符号整数,C 语言标准并没有明确定义应该使用哪种类型的右移,但几乎所有的编译器均采用算术右移。

参考如下示例:

// //@file: main.c // #include <stdio.h> #include <stdint.h> 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.out a=0xffffffff a<<1=0xfffffffe a>>2=0xffffffff b=0x00000001 b<<1=0x00000002 b>>1=0x00000000 

参考文献

[1] 龚奕利,贺莲译.深入理解计算机系统[M].北京:机械工业出版社,2016-11.C2.1.9 C语言中的移位运算.P40-41

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232143.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号