#include<format>
#include<iostream>
//展示一个变量字节的函数
using byte_pointer = unsigned char*;
void show_byte(byte_pointer start, size_t len)
{
printf("内存中字节表示为:");
for (size_t i = 0; i < len; ++i)
{
printf("%.2x", start[i]);
//cout << format("{0:2x}", start[i]);
}
cout << endl;
}
template<class T>
void show_bytes(T&rhs,size_t len = 0)
{
show_byte(reinterpret_cast<byte_pointer>(&rhs), (len ==0?sizeof(T):len));
}
//显示一个整数补码反码原码的函数
template<class T>
void binary_and_two_complement(T rhs)
{
vector<T> s;
T temp = rhs;
size_t sizes = sizeof(T) * 8;
if (rhs > 0)
{
while (rhs > 0)
{
s.push_back(rhs % 2);
rhs /= 2;
}
for (size_t i = s.size(); i < sizes; ++i)
{
s.push_back(0);
}
cout <<temp <<" 原码/补码/反码为:";
for (auto i = s.rbegin(); i != s.rend(); ++i)
{
cout << *i;
}
cout << endl;
cout << temp << " 的十六进制为:0x" << hex << temp << endl;
return;
}
else
{
T tmp = -rhs;
while (tmp > 0)
{
s.push_back(tmp % 2);
tmp /= 2;
}
for (size_t i = s.size(); i < sizes; ++i)
{
s.push_back(0);
}
s.back() = 1;
cout << format("{0} 的原码为:", temp);
for (auto i = s.rbegin(); i != s.rend(); ++i)
{
cout << *i;
}
cout << endl;
for (auto i = s.begin(); i != --s.end(); ++i)
{
if (*i == 1)
{
*i = 0;
}
else
{
*i = 1;
}
}
cout << format("{0} 的反码为:", temp);
for (auto i = s.rbegin(); i != s.rend(); ++i)
{
cout << *i;
}
cout << endl;
if (s.front() == 0)
{
s.front() = 1;
}
else
{
auto i = s.begin();
for(;i != s.end()&&( * i !=0);++i)
{
*i = 0;
}
if(i < s.end() && i>=s.begin())
*i = 1;
}
cout << format("{0} 的补码为:", temp);
for (auto i = s.rbegin(); i != s.rend(); ++i)
{
cout << *i;
}
cout << endl << temp << " 的十六进制为:0x" << hex << temp;
}
}
显示内存中字节存储顺序,原码,反码,补码函数
发布于 2022-11-01 283 次阅读
Comments NOTHING