我有兴趣访问为更好地理解事物而分配的内存部分,可以说我分配了10个字节malloc
并printf("%p", &foo)
返回0xff0a
,我是否可以分配0xff0a->0xff1a
(我的十六进制数学现在不好)并可以访问以下任何一个那些字节?
我想我记得在此同时使用了关键字volatile
和内存地址,但是我不确定该代码能做什么。
我想我的意思是我如何访问内存中的随机字节,将其转换为char或整数,可以存储在指针中以供以后访问。
我只是希望测试整数上的溢出,例如在C中(好吧,如果它刚好超过整数最大值).当我查看PHP是否实际上正在执行我告诉它的操作时,它似乎因某些原因而失败.以下是我对问题的测试:
define('INT_MAX', 0x7FFFFFFF);
print "In decimal: " . hexdec(INT_MAX) . "<br/>";
print "In decimal: " . hexdec(0x7FFFFFFE) . "<br/>"; //Under int_max
print "In hex: " . dechex(hexdec(INT_MAX)) . "<br/>";
print "Float: " . ((bool)is_float(INT_MAX)?'true':'false') . "<br/>";
Run Code Online (Sandbox Code Playgroud)
结果是:
小数:142929835591
十进制:142929835590
十六进制:47483647
浮点数:false
正如我在手册中看到的那样,如果被推翻它将会浮动,但它似乎没有并且显然更高.我是疯了还是在这里遗漏了什么,或者在PHP中使用十六进制时我真的需要知道一些奇怪的问题吗?
这奇怪地是我的第一个Java应用程序,我想要实现一个任意精度阶乘函数,我做了递归一个很好,但我的迭代一个只输出"1"而没有别的..这对我来说太晚了我无法发现为什么,我不知道哪里出错了,这里有什么明显的东西吗?
public static BigInteger ifact(BigInteger n) {
BigInteger ret = new BigInteger("1");
BigInteger i = new BigInteger("1");
for(i = new BigInteger("0"); i.compareTo(n) == 0; i.add(new BigInteger("1"))){
ret.multiply(i);
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
如果您没有注意到它使用了BigInteger软件包,请查看奇怪的文章.
另外,像C一样,你可以做类似于typedef的事情,所以我不需要每次都输入"BigInteger"吗?
编辑:我想我的意思是设定ret
为n
,可能是它,或者......可能不是.
有人今天问我是否有可能将一个可视化的基本应用程序移植到Linux或类似的平台上,我认为它是.NET所以我建议使用Mono,但是注意到在他们的vb支持页面上他们只讨论vb 8(.NET) )
mono支持非.NET vb吗?事实上,我不确定他在使用什么,我认为vb6,我根本不确定版本.
递归函数定义如下:
function factrec($x) {
if($x <= 1) {
return $x;
} else {
return $x * factrec($x - 1);
}
}
Run Code Online (Sandbox Code Playgroud)
并在这里迭代:
function factiter($x) {
$y = $x;
while($y > 1) {
$x *= ($y - 1);
$y--;
}
return $x;
}
Run Code Online (Sandbox Code Playgroud)
我已经读过,在递归函数中,正文是O(1),递归调用O(n-1)使其成为O(n),但对于迭代,它是否也是O(n)?