博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C语言的位移操作
阅读量:2425 次
发布时间:2019-05-10

本文共 556 字,大约阅读时间需要 1 分钟。

下面这段代码会输出什么结果?

[html]
  1. #include <stdio.h>  
  2.   
  3. int main()  
  4. {  
  5. printf("%d\n",( (i-sizeof(int)) >>32));  
  6. return 0;  
  7. }  
#include 
int main(){printf("%d\n",( (i-sizeof(int)) >>32));return 0;}

答案是 0

将代码修改如下:

[cpp]
  1. #include <stdio.h>   
  2.   
  3. int main()  
  4. {  
  5. printf("%d\n",( (i-((int)sizeof(int))) >>32));  
  6. return 0;  
  7. }  
#include 
int main(){printf("%d\n",( (i-((int)sizeof(int))) >>32));return 0;}
结果输出 -1

解析:

sizeof是一个操作符,它返回的结果是unsigned int。

对于无符号数:右移后,高位补0;

对于有符号数:正数,右移后高位补0;负数,右移后高位补1。

建议只对无符号数做位运行,减少出错的可能。

注意:移动的位数要小于做操作数的总位数,否则结果是undefined(虽然有时也会得到正确的结果)。

 

转载地址:http://qjdmb.baihongyu.com/

你可能感兴趣的文章
java equals方法和hashCode方法
查看>>
Redis的底层数据结构(6种)
查看>>
Redis的五大数据类型实现原理
查看>>
maven依赖jar包时版本冲突的解决
查看>>
LC 446. 等差数列划分 II - 子序列
查看>>
LC 53. 最大子序和(DP)+ LC 152. 乘积最大子序列 + LC 238. 除自身以外数组的乘积
查看>>
198. 打家劫舍 DP
查看>>
628. 三个数的最大乘积
查看>>
正向代理和反向代理
查看>>
不同的类加载器加载的类不是同一个类
查看>>
Java 序列化和反序列化
查看>>
怎么让笔记本变路由器,亲身试验可用,不用下第三方软件
查看>>
DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016 解决方案
查看>>
java.util.ConcurrentModificationException
查看>>
linux 通过crt直接上传和下载文件和文件
查看>>
javabase64编码原理和解码,加密案例
查看>>
Java 位运算(移位、位与、或、异或、非) 以及负数的二进制相互计算
查看>>
MyBatis 二级缓存机制
查看>>
第一章,安装Vmware和Ubuntu
查看>>
jquery freemarker模板设置变量每次循环加1
查看>>