欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

zhc gesp考前复习

时间:2024-06-23 10:10 作者:admin 点击:
原码 反码 补码 数字 用 二进制表示 6数据 110真值 在电脑中字节是基本单位 8位 6-00000110 原码 正整数中,原码,反码,补码相同 负数中 -6 - -00000110 通常将第一位用作符号位,0为正数,

原码 反码 补码

数字 用 二进制表示

6数据 110真值

在电脑中字节是基本单位 8位

6->00000110 原码

正整数中,原码,反码,补码相同

负数中

-6 -> -00000110

通常将第一位用作符号位,0为正数,1为负数

-6 ->  10000110 原码

负数的反码:负数的原码符号位不变,其他位取反

10000110 -> 11111001

负数的补码:

   方案1:负数的反码+1

   11111001

       1

   11111010

   方案2:负数的原码两端1不变,中间取反

   10000110

   1     1

    11110

   11111010


位运算(二进制计算)

6&1=0

与& 或| 非~ 异或^ 左移<< 右移>>

&指两边同位的数字均为1,结果才是1

9&2=0

7&1=1 通常n&1可以用来判断奇偶数

|两边同位的数字存在1,结果就是1

6|1=7

9|2=11

7|1=7

~取反

^两边同位数字相同为0不同为1

100^61= 89

1100100

0111101

1011001

64+16+8+1 = 89

<<原数据*2

6<<1=12

00000[110]

0000[110]0 -> 12

>>原数据/2 取整

6>>1=3

3>>1=1

00000[110]

000000[11]

0000000[1]

如果是负数,符号位不动

二分法 (l+r)/2 ->   l+r>>1

不需要加括号,位运算符号优先级低


进制转换:

出题方式1:n转10  10转n  n转m     [64进制以内]


出题方式2:带小数的

10进制->2进制

87.355(10)->??(2)

整数:87/2 短除法 (倒序)

小数:0.355*2 取整 按顺序(不需要倒序)

0.355*2=0.71 0

0.71*2=1.42  1

0.42*2=0.84  0

0.84*2=1.68  1

0.68*2=1.36  1

0.36*...直到小数部分消失,无法消掉就是无限长

1010111.01011....



2进制->10进制

0.01011

0/2

1/2/2

0/2/2/2

1/2/2/2/2

1/2/2/2/2/2

累加:0.25+0.0625+0.03125=0.34375


string s="1223";

stoi(s);//对

stoi("1223");//错 "1223" 默认是char*

stoi('1');//错 '1' 是char


atoi("1223");//对


数字->字符

int k=5;

char(k+'0')



#include <bits/stdc++.h>

using namespace std;

//制作进制表

string tton="0123456789abcdefghijklmnopqrstuvwxyz";

char ntot[128];

void init(){

   for(int i=48;i<58;i++) ntot[i]=i-48;

   for(int i=97;i<123;i++) ntot[i]=i-97+10;

}

//10进制转n进制

string tenton(int num,int n){

   string ans="";

   while(num){

       ans=tton[num%n]+ans;

       num/=n;

   }

   return ans;

}

//n进制转10进制

int ntoten(string num,int n){

   int jz=1;

   int ans=0;

   for(int i=num.size()-1;i>=0;i--){

       ans+=ntot[num[i]]*jz;

       jz*=n;

   }

   return ans;

}

int main(){

   init();

   int n=16,m=8;

   string a="ff2d";

   int k=ntoten(a,n);

   string b=tenton(k,m);

   cout<<k<<" "<<b;

   return 0;

}


小猫分鱼:

3 1

假设3号猫拿1条鱼,那么原有1*3+1=4,占2号猫2份

因此2号猫拿4/2条鱼,原有2*3+1=7,占1号猫2份(无法整除,失败)

假设3号猫拿2条鱼,那么原有2*3+1=7,占2号猫2份(无法整除,失败)

假设3号猫拿3条鱼,那么原有3*3+1=10,占2号猫2份

因此2号猫拿10/2条鱼,原有5*3+1=16,占1号猫2份

因此1号猫拿16/2条鱼,原有8*3+1=25,原有25条鱼

int y=0;

for(int k=1;k<n;k++){

   y=k*n+i;

   bool f=true;

   //验证

   for(int j=1;j<n;j++){

       if(y%(n-1)!=0){

           f=false;

           break;

       }

       y=y/(n-1)*n+1;

   }

   if(f){

       cout<<y;

       return 0;

   }

}


单位转换

int n;

string x, s1, d, w, s2;

cin>>n;

while(n){

   cin>>x>>s1>>d>>w>>s2;

   string l="000";

   if(s1+s2=="kmmm" ||s1+s2=="kgmg") l="000000";

   printf("%s %s = %s%s %s\n",x.c_str(),s1.c_str(),x.c_str(),l.c_str(),s2.c_str());

}

return 0;

(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%