【发布时间】:2011-12-03 19:43:46
【问题描述】:
我正在尝试在 C++ 中创建 128 位和 256 位整数,并注意到将 char** 转换为 int* 和 int* 转换为 int(以及向后)可用于将 char 数组转换为整数和整数到 char 数组。
此外,char* + int 工作正常。
但是,当我尝试char* + char* 时,编译器告诉我类型无效。有什么解决方法吗,还是我必须为操作员编写自己的函数?
例如:
int32_t intValue = 2147483647;
char *charPointer = *( char** ) &intValue;
charPointer += 2147483647;
charPointer += 2;
cout << ( *( int64_t* ) &charPointer ) << endl;
输出:4294967296
基本上,我所做的应该是这样的:
int32_t intValue = 2147483647;
记忆中的某处:
[ 05 06 07 08 09 0A 0B 0C ] ( address, in hex )
[ .. .. FF FF FF 7F .. .. ] ( value, in hex )
然后:
char *charPointer = *( char** ) &intValue;
记忆中的某处:
[ 58 59 5A 5B 5C 5D 5E 5F ] ( address, in hex )
[ .. .. 07 00 00 00 .. .. ] ( value, in hex )
然后:
charPointer += 2147483647;
我真的不知道这里会发生什么。 它似乎做了这样的事情:
[ 05 06 07 08 09 0A 0B 0C ] ( address, in hex )
[ .. .. FF FF FF FE .. .. ] ( value, in hex )
然后:
charPointer += 2;
这里也一样。 像这样的:
[ 05 06 07 08 09 0A 0B 0C ] ( address, in hex )
[ .. .. 00 00 00 00 01 .. ] ( value, in hex )
最后我只是打印它好像它是一个 8 字节整数:
cout << ( *( int64_t* ) &charPointer ) << endl;
那么,谁能解释为什么添加的不是指针的值,而是被指向的值?
【问题讨论】:
-
请提供一些代码来说明您的意思。为什么要添加指向另一个指针的指针?
-
我不认为
char* + int(或int*到int(或向后))做你认为它做的事情 -
问题的前提是无效的。但谷歌“bigint c++”
-
@RPFeltz:根据您对我的回答的反应,我可以看出这不会有建设性。所以我把它删了。我给出的
+= 10000例子很糟糕。但是试试int intValue = 2147483647;和charValue += 2147483647; charValue += 2;你会看到... -
根据您对我们的回应以及您的编辑,老实说,我无法判断您是否真的不了解发生了什么,或者您是否只是在拖钓。 (我希望是前者。)所以我不会继续玩这个反例游戏。但是考虑一下当“实际”数字溢出 64 位时会发生什么。或者如果你只是为 32 位编译...
标签: c++ math operators int arrays