gpt4 book ai didi

linux - shell位移产生不同的数字

转载 作者:IT王子 更新时间:2023-10-29 01:11:56 26 4
gpt4 key购买 nike

当我运行时在我的本地机器 bash 中:

echo $((192 << 24))
3221225472

但是在我的嵌入式目标忙框 SHELL 上我得到了其他东西:

echo $((192 << 24))
-1073741824

不过,当我左移一个较小的数字时它会起作用。嵌入式设备是 64 位的,而我的本地主机是 32 位的。

需要说明的是,在 32 位机器上该值为正,在 64 位机器上该值为负。

编辑:这是在嵌入式设备上,带 SHELL 的 64 位机器。左移 23 时不会发生这种情况。

echo $((192 << 23))
1610612736
echo $((192 << 24))
-1073741824

在本地主机上,这是一台 32 位机器,带有 BASH:

echo $((192 << 55))
6917529027641081856
echo $((192 << 56))
-4611686018427387904

最佳答案

192 的二进制表示是11000000。当您将它向左移动 24 个位置时,唯一设置的两个位是两个最高有效位 - 表示为 11000000 00000000 00000000 00000000。当 32 位系统看到最高有效位集时,它会将其解释为“二进制补码”格式的负数。对于 64 位系统,最高有效位仍为零,因此被解释为正数。

这只是 32 位机器上的整数溢出。在使用 32 位和 64 位有符号整数类型时,您可能会在 C 或任何其他语言中看到相同的行为。

关于linux - shell位移产生不同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898715/

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