32位有符号整数的最小值是什么,恰好是在[本网站]创建帐户的安全性"挑战"问题(编辑:链接现在是恶意软件)(不要判断我只是好奇和无聊).
我以为他们说的是一个典型的32位int,它可以存储大到的数字2,147,483,647.但是,当我尝试-2147483647它时,我说错了.我尝试了几种变体,-2,147,483,647但没有任何作用......
我是否误解了这个问题,或者网站有什么问题吗?
PS我也按照建议尝试了-2,147,483,648
这是一张照片

在64位计算机上从Visual Studio 2012运行应用程序,显示以下错误消息:
检索具有CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B}的组件的COM类工厂由于以下错误而失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))
我在visualstudio中使用Inventor packandgo dll库.
任何人都知道错误是什么?
考虑这段 C 代码:
#include <math.h>
#include <stdbool.h>
#include <stdio.h>
bool foo(int a, int b, int c, int d) {
double P = atan2(a, b);
double Q = atan2(c, d);
return P < Q;
}
bool bar(int a, int b, int c, int d) {
return atan2(a, b) < atan2(c, d);
}
int main() {
if (foo(2, 1, 2, 1)) puts("true"); else puts("false");
if (bar(2, 1, 2, 1)) puts("true"); else puts("false");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我用 编译它时gcc -lm -m64,它会打印
false …Run Code Online (Sandbox Code Playgroud) Intel的32位处理器(如Pentium)具有64位宽的数据总线,因此每次访问可获取8个字节.基于此,我假设这些处理器在地址总线上发出的物理地址总是8的倍数.
首先,这个结论是否正确?
其次,如果它是正确的,那么应该将数据结构成员对齐在8字节边界上.但我见过人们在这些处理器上使用4字节对齐.
他们怎么能这样做呢?
我有一个64位版本的llvm-gcc,但我希望能够构建32位和64位二进制文件.这有旗帜吗?我尝试传递-m32(适用于常规gcc),但我收到如下错误信息:
[jay@andesite]$ llvm-gcc -m32 test.c -o test
Warning: Generation of 64-bit code for a 32-bit processor requested.
Warning: 64-bit processors all have at least SSE2.
/tmp/cchzYo9t.s: Assembler messages:
/tmp/cchzYo9t.s:8: Error: bad register name `%rbp'
/tmp/cchzYo9t.s:9: Error: bad register name `%rsp'
...
Run Code Online (Sandbox Code Playgroud)
这是倒退; 我想为64位处理器生成32位代码!
我正在运行llvm-gcc 4.2,这是Ubuntu 9.04 x86-64附带的.
编辑:当我使用-v标志运行llvm-gcc时,这是输出的相关部分:
[jay@andesite]$ llvm-gcc -v -m32 test.c -o test.bc
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../llvm-gcc4.2-2.2.source/configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --prefix=/usr/lib/llvm/gcc-4.2 --enable-languages=c,c++ --program-prefix=llvm- --enable-llvm=/usr/lib/llvm --enable-threads --disable-nls --disable-shared --disable-multilib --disable-bootstrap
Thread model: posix
gcc version …Run Code Online (Sandbox Code Playgroud) 我在这个页面上发现了类似的问题,但我似乎无法弄清楚如何解释答案或弄清楚它们是否真的重复.
以下是我发现的可能重复项,并附有评论:
在32位计算机上编译.NET 4.0框架时,SetWindowsHookEx返回0
它似乎没有返回0我的,但我注意到崩溃时报告的句柄(32位上的.NET 4.0)与运行时报告的句柄不同(32位上的.NET 3.5),像崩溃句柄= 523727,工作句柄= 172738378.
在VS2008调试器中调用SetWindowsHookEx始终返回NULL
我可以在Visual Studio外部运行时重现我的问题
这似乎是最有希望的,除了对删除的答案的评论提到我应该使用LoadLibrary和GetProcAddress来加载.NET 4.0中的user32.dll,因为有关加载程序集的更改.但是,我很确定它是我自己无法找到的模块,但我不知道这是否适用.
Hans Passant对最后一个删除答案的评论如下:
你在使用.NET 4.0吗?它的CLR改变了程序集的加载方式,不再有LoadLibrary调用,也没有模块句柄.使用GetEntryAssembly()代替另一种修复. - 汉斯帕斯特5月5日19:43
那么,这里的字是什么?你在使用.NET 4.0吗?您是否尝试使用LoadLibrary("user32.dll")来获取可用的DLL句柄? - Hans Passant 5月6日15:43
我很确定我不需要这样做,但显然我不是百分百肯定.如果我需要更改它,我留下的问题是,为什么它适用于64位操作系统,在编译时Any CPU,但在任何配置中都不适用于32位.
如果加载.NET程序集确实发生了一些变化,那么我没有得到类库的正确句柄,我有以下问题:
背景
我在.NET 4.0中构建了一个程序,它使用带有WH_KEYBOARD_LL钩子类型的SetWindowsHookEx来捕获按键.这在我的64位Windows 7上运行良好,但在32位Windows 7上安装键盘挂钩时崩溃时出现"找不到模块".
这是我尝试过的:
我宁愿不将我的代码切换到.NET 3.5,因为我使用了一些类库来简化工作,而最新的代码只在.NET 4.0中.
如果需要,可以下载包含Visual Studio 2010项目的.ZIP文件,也可以粘贴以下两个文件.
要重新创建是否要沿着该路线前进:
然后构建并运行,测试各种配置.
using System;
using HookLib;
namespace HookTest
{
class Program
{
static void Main() …Run Code Online (Sandbox Code Playgroud) 我们有一个安装Tomcat的安装程序.我如何知道它是32位版本的Tomcat还是64位版本?
我有64位主机操作系统的64位主机.我想安装一个虚拟机(1GB或更小的RAM),但我不知道哪个会显示更好的性能.我听说64位硬件/软件的唯一优势是每个进程可以处理超过2 GB的内存,而且它实际上比32位慢.
因此,最好安装32位guest虚拟机操作系统/操作系统或64位.
我认为我将运行的软件是32位,所以无论如何它都会运行/不运行/使用32位库.但是,如果我有64位版本的软件怎么办?
我有一个Visual Studio安装程序,正在创建一些注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
Run Code Online (Sandbox Code Playgroud)
但它正在创建的注册表项自动出现在Wow6432Node下:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApp
Run Code Online (Sandbox Code Playgroud)
在msi执行的C#代码中创建注册表项时,如何忽略Wow6432Node?