实验内容:
//zhangguizhu 是个好老师!
题目2.1 利用位运算将一个128位的数扩大两倍
内容:利用位运算将一个128位的数扩大两倍。
例如:输入:4 12 9 5
输出:00000000000000000000000000001010 00000000000000000000000000010010 00000000000000000000000000011000 00000000000000000000000000001000
题目2.2 :输入一个十进制数int或float类型,利用位操作,输出机内表示的二进制数.
内容:输入一个十进制数int或float类型,利用位操作,输出机内表示的二进制数.
例如:输入:8
输出:00000000000000000000000000001000
要求运行结果是给出的程序运行结果截图,并且至少给出三组不同类型的数据测试用例。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <cctype>
#include <fstream>
#define INF 0x3f3f3f3f
#define EPS 1e-24
using namespace std;
//实验2.1,2.2
/*Tips:需要注意数字溢出,128位的有符号数用四个有符号int表示会有问题
*要用无符号的int,或者用ll 目前的疑惑
*计算机内不是从低位子节在前,高位子节在后
*不是所有整数都可以用float表示,看似一样的两个数用int/float计算机内部表示不一定相同
*模仿java的floatBitsToInt(),我们可以强制指针类型的转换来求
*测试数据:
3
4 12 9 5
4294967295 2147483647 5 6
2147483647 5 6 4294967295
3
8
127
9999
4
125.5
2.33
0.125
1024.2
*/
typedef long long ll;
const ll Mod = 1e9 + 7;
//输出二进制数
void print_binary(int x){
for(int i=31;i>=0;i--){
cout<< ((x&(1<<i))!=0);
}
cout<<" ";
}
void print_binary2(char x){
for(int i=8;i>=0;i--){
cout<< ((x&(1<<i))!=0);
}
cout<<" ";
}
//判断最高位是1/0
int check(int x){
/*if((x&(1<<31))!=0)
return 1;
else return 0;*/
return ((x&(1<<31))!=0);
}
void problem_one(){
cout<<"128位的整数乘以2(位运算):"<<endl;
unsigned int a,b,c,d;//a可负
int T;
cin>> T;
while(T--){
cin>>a>>b>>c>>d;
int flag_a = check(a),flag_b = check(b),flag_c = check(c),flag_d = check(d);
a <<= 1;b <<= 1;c <<= 1;d <<= 1;//cout<<flag_a<<flag_b<<flag_c<<flag_d<<endl;
c = c | flag_d;
b = b | flag_c;
a = a | flag_b;
//低位先输出
print_binary(d); ;print_binary(c); print_binary(b); print_binary(a); cout<<endl;
}
}
void problem_two_int(){
cout<<"整数的机内二进制表示:"<<endl;
int T;
cin>> T;
int num;
while(T--){
cin>>num;
print_binary(num);
cout<<endl;
}
}
void problem_two_float(){
cout<<"浮点数的机内二进制表示:"<<endl;
int T;
cin>> T;
float num;
while(T--){
cin>>num;
int *numD = (int *)#
print_binary(*numD);
//char *p = (char *) #
//print_binary(*numD);
/*print_binary2(*p);
print_binary2(*(p+1));
print_binary2(*(p+2));
print_binary2(*(p+3));*/
cout<<endl;
}
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
problem_one();
problem_two_int();
problem_two_float();
return 0;
}