当前位置:  开发笔记 > 编程语言 > 正文

左移一个正整数给我一个负数

如何解决《左移一个正整数给我一个负数》经验,为你挑选了1个好方法。

我使用shift来对我用C语言编写的程序中的一些数学进行优化:

int h;
h = 104;
h = (h<<8)+(h<<6);
printf("offset: %d",h);

我得到这个结果:

offset: -32256

当我期待的是

(104* (2^8) ) +  (104 * (2^6)) = 33280

任何人都可以解释为什么我得到负面结果,我该怎么做才能得到我期望的结果?

我使用BORLANDC编译器与DOSBOX运行我的程序,如果这是有用的.



1> P.P...:

在Borland C编译器上,int的大小是16位.所以声明

h = (h<<8)+(h<<6);

溢出有符号整数.各个移位操作都很好,因为结果在16位有符号整数可以容纳的范围内.但是添加会导致溢出.有符号整数溢出是C中未定义的行为.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有