c_cpp C中32位有符号整数机器的原型,它只使用int来对堆栈和求和进行加载
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp C中32位有符号整数机器的原型,它只使用int来对堆栈和求和进行加载相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
/*
* Prototype for cell based vm
* uses only arrays and blocks of 32-bit signed integer.
*/
// macro to get length of cells machine
#define CellMachine_LEN(cm) (cm->head - cm->cells)
// Used to read and categorize int cells
enum CellType {
CellType_int,
CellType_add
};
struct CellMachine {
int size;
int* head;
const int* end;
int* cells;
};
struct CellMachine* CellMachine_new(int size)
{
struct CellMachine* mach = malloc(sizeof(struct CellMachine));
mach->size = size;
mach->cells = malloc(sizeof(int) * size);
mach->head = mach->cells;
mach->end = mach->head + size;
memset(mach->cells, 0, size * sizeof(int));
return mach;
}
//writes an int to the cells
void CellMachine_put_int(struct CellMachine* mach, int i)
{
*(mach->head++) = CellType_int;
*(mach->head++) = i;
assert(mach->head < mach->end);
}
// sums the numbers loaded into the cells
int CellMachine_sum(struct CellMachine* mach)
{
int sum = 0;
int* traverse = mach->cells;
while(traverse != mach->head)
{
switch(*traverse++)
{
case CellType_int:
sum += (*traverse++);
break;
default:
fprintf(stderr, "%s\n", "Error unknown type in cell.");
return -1;
}
}
return sum;
}
void CellMachine_rdx_sum(struct CellMachine* mach)
{
int* start = mach->cells + 1;
int* traverse = start + 1;
while(traverse != mach->head)
{
switch(*traverse++)
{
case CellType_int:
*start += (*traverse++);
break;
default:
fprintf(stderr, "%s\n", "Error unknown type in cell.");
return;
}
}
mach->head = start + 1;
}
int main(int argc, char const *argv[])
{
struct CellMachine* machine = CellMachine_new(10);
CellMachine_put_int(machine, 5);
CellMachine_put_int(machine, 5);
CellMachine_put_int(machine, 5);
CellMachine_put_int(machine, 5);
CellMachine_rdx_sum(machine);
printf("sum is %d \n", machine->cells[1]);
// sum is 20
// load more value
CellMachine_put_int(machine, 5);
CellMachine_rdx_sum(machine);
printf("sum is %d \n", machine->cells[1]);
// sum is 25
return 0;
}
以上是关于c_cpp C中32位有符号整数机器的原型,它只使用int来对堆栈和求和进行加载的主要内容,如果未能解决你的问题,请参考以下文章
将 32 位有符号整数转换为 24 位有符号音频数据
Python:如何将 32 位有符号长整数转换为 7 位整数
如何在 IA32 上将带符号的整数相加成更大的和。 32位有符号整数的64位总和?
2021-09-12:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string(
关于 64 位有符号整数的最大可计算值的困惑 [重复]
Scala学习