计算机的位数是和CPU有关还是和系统有关,我和我同学同样是WIN7的系统,为啥他的是32位,我的是64位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机的位数是和CPU有关还是和系统有关,我和我同学同样是WIN7的系统,为啥他的是32位,我的是64位相关的知识,希望对你有一定的参考价值。

64位的系统不是应该兼容32位的吗,为什么还有许多软件不支持
我的电脑配置:
Intel(R) Pentium Dual Core T4400 (2.2GHz, 800MHz FSB, 1MB)
LCD Bezel with Camera
WINDOWS-LIVE
Dell(TM) Support Center (64-bit OS)
2GB(1X2GB) DDR2 SDRAM内存1
250GB SATA硬盘(5400转) 1
Cyberlink PowerDVD软件1
8倍速DVD+/-RW 刻录光驱(DVD+R双面写入功能) 1
Roxio Burn 1.0 1
Power Cord For CN 1
90 W Adapter 3 Pin 1
48WHr 6芯 锂离子主电池1
15.4inch Carry Case 1
ATI Mobility Radeon HD4330, 512MB独立显存1

你的CPU有兼容32和64位的指令集,两种系统都可以在上面运行,但是你的系统是64位的,你说的不兼容是由于系统的缘故。安装一个32位就是了,至于不兼容的原因,很多程序是在32位的环境下开发的,到了64位的环境下,一些兼容性较差的软件,就“受不了了”,也就出现了不兼容的情况。 参考技术A 和CPU,操作系统都有关系。
CPU关系重一些。。
参考技术B 你也可以装32位系统啊,64为系统目前的兼容性不如32位的 参考技术C 本子建议装32位的系统,相对来说稳定一些,
系统的位数,和CUP有一定的关系所在,你从系统内只能辨别出系统的位数

无法计算 C++ 中的指针!需要有关基本字符串和指针的信息

【中文标题】无法计算 C++ 中的指针!需要有关基本字符串和指针的信息【英文标题】:Can't figure out pointers in C++! Need info about basic strings and pointers 【发布时间】:2015-11-23 11:40:14 【问题描述】:

各位程序员,你好,我的大学老师给我发了一些用 C++ 解决的问题,我和我的朋友都想不通。看不懂的部分我会写下来。

问题 1: 您必须输入一个字符串,其中包含空格 ' ' 并且代码计算字符串中的空格。 示例:

 asd123       count = 0
 a sd123      count = 1
 a s d        count = 2

解决办法如下:

 typedef char strType[100];
 strType str;
 cout << "string: ";
 cin.getline(str, 100); 
 cout << "\"" << str << "\"\n";


 short count = 0;  
 char *adr = strchr(str, ' '); //value might be NULL

 while (adr)
 
    ++count;
    adr = strchr(adr + 1, ' ');
 




cout << "count: " << count << endl;

short count =0 后需要解释;我们无法理解 *adr 的值(它是一个确切的数字,还是真假,或者任何类型)。如何将 +1 添加到 adr,while 循环如何结束。因为如果 *adr 是复杂的东西(由许多数据组成),你怎么能将它的值增加一(它存储出现在 str 中的空格 ' ' )并成为停止时间的东西。

【问题讨论】:

阅读 strchr 的作用。那就看看这两个教程pointers,pointer arithmetic 这主要是 C,而不是 C++。请把你的老师指向这个演讲:Stop Teaching C。好吧,也许你不应该,这取决于她的接受程度...... 他看起来有点固执,我不敢直接面对他(因为我不太了解他)。 我强烈建议阅读Open letter to students with homework problems。这可能会让你理解为什么“愚蠢”的任务有时从长远来看是有意义的。 【参考方案1】:

我猜这是您第一次遇到指针。如果您不太了解它们,我强烈建议您去学习它们,因为它们对 C/C++(以及其他语言)非常重要。

不过,为了这个问题,我将给出一个非常粗略的定义。指针“指向”特定的内存位置。它的“类型”用于定义它预计在该点使用多少内存。也就是说,一个 char* 指针只会期望处理一个 char 的数据,并且只会保留那么多内存。 long* 将保留和处理 long 的内存(明显更大,多少取决于系统,但这是另一个主题)。

所以当你的代码 sn-p 说:

char *adr = strchr(str, ' '); //value might be NULL

意思是:“adr”的值是一个内存位置,它是 char 类型的大小,我们将其设置为等于库函数 strchr 的结果。我们稍后会回到 strchr。

现在,“str”就是所谓的C 风格字符串。这是因为它对字符串使用 C 方法,而不是较新的 C++ 库 string 类型,后者的工作方式略有不同。 C 风格的字符串实际上是一块连续(无间隙)的内存 - 在这种情况下,100 个字符在内存中一个接一个地排列。如果我想读取字符串,我所做的就是一个接一个地读取它的每个部分,所以我从头开始,读取一个字符,然后我想向前跳转一个字符的内存,到下一个字符。这就是 adr++ 所做的——它说“让我前进一步”,在这种情况下一步是一个字符,因为那是 adr 的“类型”。这可能有意义,也可能没有意义,Mohamad Elghawi 发布了指向指针算术教程的链接,该教程也值得一读。

回到 strchr。 strchr 是一个在字符串中搜索特定字符值的函数。在这种情况下,在 str 中找到我 ' '(空格)。所以它会到 str 开头的内存位置,并跳过它直到找到一个空格。如果找不到空格,则返回 NULL - 因此代码中的注释。

如果它确实找到了一个空间,它会将那个空间的内存位置分配给adr。然后我们跳入while循环。如果 adr 是 SOMETHING,那么我们至少找到了一个空格,所以迭代计数。然后我们说“好的,作为 adr 的空间是第一个空间,所以如果还有更多的空间,它们必须在它之后,所以我们从内存位置再次搜索空间,在 adr 的当前值之后,否则我们将再次拾取相同的空间,我们的计数将是错误的。继续这样做直到我们得到 NULL 作为答案,每次 adr 不为空时,我们的计数加 1。当 adr 为空时,没有字符串中有更多的空格,所以我们的计数结束了。有意义吗?

您可能有的最后一个问题:strchr 如何知道字符串的结尾在哪里?好吧,这是可行的,因为 C 风格的字符串也称为“空终止字符串”——它们在末尾自动有一个 \0(空)值条目。 strchr 知道如果碰到这个值,就已经到了字符串的末尾。

下一课:指针是一个非常基本的概念,将在互联网上的教程和书籍中全面介绍。如果您仔细查看它们并查看 strchr 的作用,您可能会在合理的时间内找到答案。然而,我们曾经都是初学者,我意识到这往往有点令人生畏。下次先努力尝试找到现有的答案:)

【讨论】:

【参考方案2】:

在您的示例中,strchr 返回指向字符串中具有值空间的位置的字符指针。如果它是一个有效的while循环指针,则允许它进入循环并增加变量count的值。 add+1 是在字符串中的空格字符之后到达字符串中位置的下一个字符指针的指针算法。

【讨论】:

以上是关于计算机的位数是和CPU有关还是和系统有关,我和我同学同样是WIN7的系统,为啥他的是32位,我的是64位的主要内容,如果未能解决你的问题,请参考以下文章

c语言int类型占的字节数因不因机子是64位还是32位的而改变啊?

技术岗位到一定年限后(人到中年)是该发展技术的深度,还是广度

有关计算机组成的分享~

内存寻址能力与CPU的位宽有关系吗?

看了build to win之后的感想

机器字长 存储字长 指令字长 机器字长