[ZhuJei]C++实验2.1/2.2

实验内容:
//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 *)&num;
        print_binary(*numD);
        //char *p = (char *) &num;
        //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;
}












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java经典算法题例。参赛必做。 【程序14】   题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。   1.程序分析:判断素的方法:用一个分别去除2到sqrt(这个),如果能被整除, 则表明此不是素,反之是素。   【程序15】   题目:打印出如下图案(菱形)   *   ***   ******   ********   ******   ***   *   1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。   【程序16】   题目:有一分序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个列的前20项之和。   1.程序分析:请抓住分子与分母的变化规律。   【程序17】   题目:求1+2!+3!+...+20!的和   1.程序分析:此程序只是把累加变成了累乘。   【程序18】   题目:利用递归方法求5!。   1.程序分析:递归公式:fn=fn_1*4!   【程序19】   题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?   1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁,需知道第四人的岁,依次类推,推到第一人(10岁),再往回推。   【程序20】   题目:给一个不多于5位的正整要求:一、求它是几位,二、逆序打印出各位字。   【程序21】   题目:一个5位,判断它是不是回文。即12321是回文,个位与万位相同,十位与千位相同。   【程序22】   题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。   1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。   【程序23】   题目:求100之内的素   【程序24】   题目:对10个进行排序   1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。   【程序25】   题目:求一个3*3矩阵对角线元素之和   1.程序分析:利用双重for循环控制输入二维组,再将a[i][i]累加后输出。   【程序26】   题目:有一个已经排好序的组。现输入一个要求按原来的规律将它插入组中。   1. 程序分析:首先判断此是否大于最后一个,然后再考虑插入中间的的情况,插入后此元素之后的,依次后移一个位置。   【程序27】   题目:将一个组逆序输出。   1.程序分析:用第一个与最后一个交换。   【程序28】   题目:取一个a从右端开始的4~7位。   程序分析:可以这样考虑:   (1)先使a右移4位。   (2)设置一个低4位全为1,其余全为0的。可用~(~0 < <4)   (3)将上面二者进行&运算。 【程序29】:用1、2、2、3、4、5这六个字,用java写一个main函,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。 【程序30】写一个方法,用二分查找法判断任意整在任意整组里面是否存在,若存在就返回它在组中的索引位置,不存在返回-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值