深入理解计算机操作系统
zhanggusheng
谦谦君子,温润如玉
展开
-
指针~随笔
指针有两个方面,它的值和它的类型,它的值表示的是某个指向的位置,而它的类型表示那个位置上所存储的的对象类型。int x = 3;int *p = &x;cout p = new int[3];p[1] = 3;cout 一个一个的分析int main(){int x = 3;int *p = &x;cout GetMe原创 2016-10-24 22:31:26 · 253 阅读 · 0 评论 -
单精度浮点数 二进制的转换 C++实现
//将单精度浮点数,转换为十进制string MySystem::FloatToBinaryByMemory(float num){ //只用内存中的结构来输出二进制结果 unsigned char *p = (unsigned char *)(&num); string Result(""); for (int i = sizeof(num)-1;i>=0;--i)原创 2016-10-31 19:26:50 · 8495 阅读 · 1 评论 -
unsigned int 逻辑右移
要将一个无符号数转换为一个更大的数据类型,我们只要简单地在表示的开头添加0,这种运算叫做零扩展。要将一个有符号的转换为一个更大的数据类型,我们需要在前面添加有效位,这种运算叫做符号扩展。先看一段代码//判断无符号的数字执行>>是否执行了算术运算的。bool MySystem::UnsignedShiftAreArithmetic(){ //由于是与机器无关的,所有定义 uns原创 2016-10-29 17:06:25 · 1711 阅读 · 0 评论 -
数据的截断
将一个w位的数据截断为k位的数据1.对于无符号的数据(num)的转换:num Mod pow(2,k);例如: unsigned short x= 257; unsigned char p =x ; //1 原因 257%(pow(2,sizof(unsigned char)*8)) // sizof(unsigned char)*8 得到数据有原创 2016-10-29 14:50:45 · 3200 阅读 · 0 评论 -
有符号整数、无符号整数的转换以及小数据转换为大数据
1.有符号转换为无符号的整数的规则:unsigned int MySystem::T2U(int x){ if (x >= 0) { return x; } return UINT_MAX + 1 + x;}2.无符号转换为有符号的规则:int MySystem::U2T(unsigned int x){ if (x<=INT_MAX) { return x; }原创 2016-10-29 14:22:35 · 4431 阅读 · 0 评论 -
十六进制加和减
已经经过数据测试,所得结果正确,但是难免会有遗漏的数据,如果测试不正确,请联系我,我会尽力改正string MySystem::HexAdd(string num1, string num2){ //首先判断字符前两个是否为“0x”或者"0X"; if (num1.size() < 2 || num2.size() < 2) { return ""; } if ('0' !=原创 2016-10-27 01:45:54 · 2621 阅读 · 0 评论 -
十进制转换为十六进制
string MySystem::DecToHex(int n){long long Temp = static_cast(n);if (Temp{Temp = INT_MAX + n + 1;}string Result("0X");//保存匹配的结果char Map[] = { '0', '1', '2', '3', '4', '5', '6', '7',原创 2016-10-25 00:16:16 · 503 阅读 · 0 评论 -
十进制转换为二进制
string MySystem::DecToBinary(int n){ //因为要处理负数的情况,且负数和正数的不对称性,所以需要将其转换为大数 //第一种,我们可以使用常规的方法来求解,即取2的模数,然后除以2.....如此循环,得到结果 long long Temp = static_cast(n); if (Temp<0) { //处理补码的情况 Temp = UIN原创 2016-10-25 20:32:38 · 303 阅读 · 0 评论 -
二进制转换为十进制
int MySystem::BinaryToDec(string str){ //从右往左,依次乘以2的幂数 //例如: //1 1 1 1 //相对应与 //pow(2,3) pow(2,2) pow(2,1) pow(2,0) int Result = 0; for (int i = str.size() - 1, Index = 0; i >= 0;--i,++Index)原创 2016-10-25 20:46:47 · 552 阅读 · 0 评论 -
十进制转换为十六进制
int MySystem::HexToDecHelp(char ch){ switch (tolower(ch)) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5;原创 2016-10-25 21:18:13 · 598 阅读 · 0 评论 -
二进制转换为十六进制
string MySystem::BinaryToHex(string str){if (str.empty()){return "";}int Complement = 0;//需要补充的位数 ---二进制数据不是4的倍数的话,需要在左边补0int Length = str.size() % 4;if (Length){Complement = Lengt原创 2016-10-24 23:58:37 · 1074 阅读 · 0 评论 -
c中关于位操作的一些运算
1.不使用临时变量,交换两个数据void(int *x,int *y){ *x=*x^*y; *y=*x^*y; *x=*x^*y;}2.指针(例如,一个被声明为类型“char*”的变量)使用机器的全子长。例如:void PointerInfo(char *p){ cout << sizeof(p) << endl;}using namespace std;原创 2016-10-26 00:13:20 · 283 阅读 · 0 评论 -
不使用乘号 除号 计算两个数字的乘 和 除
//不使用*操作符,计算两个int类型的乘法int MySystem::Multi(int x1, int x2){ //先将其转换为大数,因为INT_MAX 的绝对值不能转换为INT_MIX,转换的结果的为INT_MAX+1,这将导致正溢出,变为负值 INT_MIN long long Lx1 = static_cast(x1); long long Lx2 = static_cast原创 2016-10-30 00:15:17 · 2040 阅读 · 0 评论