作业介绍

笔记

1.十进制转k进制
  可以用短除法,口诀——除以k取余数,余数逆序存放
2.k进制转十进制
带权求和——了解每一位转化为对应进制的权值。每一位数字乘以k的权值次方求和
3.2的整数幂次进制快转
2个二进制位表示一个4进制位
3个二进制位表示一个8进制位
4个二进制位表示一个16进制位
4.位运算
按位与 &——对应位都为1,结果为1,否则为0
按位或 |——对应位都为0,结果为0, 否则为1
按位异或 ^——对应位相同为0,不同为1
按位取反~——0变1,1变0 (符号位也会变化)
按位左移 <<——整体左移,右边空位补0——左移一位等价于乘以2
按位右移 >>——整体右移,左边空位补符号位——右移一位等价于除以2
5.存储与计算原理
原码、补码、反码
正数的原码补码反码都一样
负数:
原码最高位为符号位1
反码:除符号位按位取反
补码:反码+1.
6.拓展内容——小数进制转化方法
乘k取整,直到没有小数全为0,否则需要保留精确到几位。
例如:10.75十进制转为二进制:
首先,分为两部分:整数部分——10=(1010)B
小数部分——0.75=(0.11)B

正数的原码补码反码不变
负数
	原码,首位(符号位)为1,其余正常除2取余
	反码,首位不变,其余反过来(0<->1)
	补码,反码+1
做有负数的计算的时候,用补码
	算出来的结果需要-1变成反码,再反过来变成原码

八进制和十六进制

#include<bits/stdc++.h>
using namespace std;

// 28%2 = 0  ->  28/2 = 14
// 14%2 = 0  ->  14/2 = 7
// 7%2 = 1   ->   7/2 = 3
// 3%2 = 1   ->   3/2 = 1
// 1%2 = 1   ->   1/2 = 0

int a[1005];
int cnt;   //cnt表示有几个余数
int n;
int main(){
    cin >> n;
    int n1 = n;
    while(n){
    	a[++cnt] = n%8;
    	n /= 8;
    }

    for(int i=cnt; i>=1; i--) cout << a[i];
    cout << endl;

    memset(a, 0, sizeof(a));  //重置a数组全部为0
	cnt = 0;
	//157%16=13,157/16=9
	//9%16 = 9,  9/16 = 0
	while(n1){
		a[++cnt] = n1%16;
		n1 /= 16;
	}
	//10->'a'(97)
	//11->'b'(98)
	//12->'c'(99)
	for(int i=cnt; i>=1; i--) {
		if(a[i]<10) cout << a[i];
		else cout << (char)(a[i]+87);
	}
    return 0;
}
状态
已结束
题目
4
开始时间
2024-1-13 0:00
截止时间
2024-1-21 23:59
可延期
24 小时