当对任何数字进行移位操作时,如何返回原始数字
when a shifting operation is applied on any number .how to get back the original number
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n=99;
int shift=n>>2;
cout<<shift;
shift=shift<<2;
cout<<shift;
}
上面的结果给出"unsignedShift=24"。问题是,如果24已知,我怎样才能得到原来的值比如n
= 99。当我使用左移时,它显示的是96。如何处理负数
如果不存储原始数字(或其部分(实际上是最后一位)),则没有办法,因为移位不是内射,即有一些不同的数字在移位后变得相同。
3>>1 // = 1;
2>>1 // = 1;
如果你有1。你会得到什么?2或3
移动二进制表示的数实际上是除以2。
你正在做:
99 / 2 * 2 = 24.75
.75部分不能是int
类型,所以剩下24
24 * 2 * 2 = 96
1100011 = 99
右移两位:
0011000 = 24
向左移动两位:
1100000 = 96
你已经丢失了下面的两位,总共是3。因此,结果的差异是:99 - 96 = 3.
这里真正的问题是你为什么要这样做——你可能不想做位操作。对于实数,请使用double
或类似的类型。
当你向右移动2位时,最后2位丢失了,当你向左移动时,它们被00取代
你可以这样做
保留2位
bits_to_be_lost = n &((0x1<<2) - 1)
那么你的代码
必须是
n<<2 | bits_to_be_lost
相关文章:
- 函数如何使用引用返回所需的数字?
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- 返回 int 中可被 2 c++ 整除的所有数字的总和
- C++ python 中的函数返回数字而不是字符串
- 使用非托管导出将字符串从 C# 返回到C++将返回数字
- 我的代码应该接受一个数字,并返回字母等级或"Grade is not valid"但 else 语句不起作用
- 如何返回一串字母数字字符中的最大值(例如-1A003B3)?
- 将 MPFR 数字转换为字符串并返回
- C++ 递归:返回数字的最小偶数
- typeid.name 返回派生类类型之前的数字
- Fibbonaci 递归代码返回错误值,始终返回下一个数字
- 为什么我的阶乘数查找器返回以C++输入的数字?(已编辑)
- 尝试编写函数尝试从字符串中提取数字,但它返回不相关的数字
- 随机函数在循环中调用时返回相同的数字!C++
- 将字符转换为ASCII返回数字太大
- 为什么此范围基于语句返回一个数字太低的范围
- 为什么此代码只能识别文本文件中的第一行?输入任何大于 1 的数字都会返回"Atomic Number Not Found"
- 相同的数字代码返回不同的输出,无论是 C++ 还是 C
- 在数组中查找最大数字将返回最大整数值
- 用于验证值的函数在调用 1 位数字时返回 true,但当其 2 位或更多时,即使为 true 也返回 false