gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:39:45 24 4
gpt4 key购买 nike

我使用 shift 来优化我必须在用 C 编写的程序中做的一些数学运算:

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

我得到这个结果:

offset: -32256

当我期待的是

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

谁能解释为什么我会得到阴性结果,我该怎么做才能得到我期望的结果?

如果有用的话,我正在使用带有 DOSBOX 的 BORLANDC 编译器来运行我的程序。

最佳答案

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

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

overflows a signed integer .单独的移位操作很好,因为结果在 16 位有符号整数可以容纳的范围内。但是添加会导致溢出。有符号整数溢出是 undefined behaviour在 C 中。

关于c - 左移一个正整数给我一个负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34190776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com