回 帖 发 新 帖 刷新版面

主题:C++,请指教

[color=FF0000][size=3]声明:偶是个C++初学者,SO,很多问题可能问得很白痴,请见谅哈,希望大家指教,谢谢!!![/color][size=5]#include <iostream>[/size]
using namespace std;
int main()
{
unsigned int x;
unsigned int y=100;
unsigned int z=50;
x=y-z;
cout<<"Differernt is:"<<x;
x=z-y;
cout<<"\n"<<"Now different is:"<<x<<endl;
return 0;
}
这个程序运行结果是
Differernt is:50
Now different is:4294967246
我想问一下4294967246这个结果是怎么得到的,谢谢咯![/size]


还有一个程序:
#include <iostream>
using namespace std;
struct student
{ int num;                
  char name[20];      
  char sex;
  int age;
};student s1;
void main()
{
    s1.num=97001;
    s1.name="Lin Lin";
    s1.sex='F';
    s1.age=19;
    cout<<s1.num<<s1.name<<s1.sex<<s1.age;
}

出现错误的是:error C2440: '=' : cannot convert from 'char [8]' to 'char [20]'
        There is no context in which this conversion is possible
Error executing cl.exe.
我看不懂是什么意思,要怎么改啊?

回复列表 (共8个回复)

沙发

第一程序中的x y z都是无符号型,所以z-y产生的结果是错误的。
第二个程序中,不能使用等号对字符串赋值,而要用strcpy()函数进行赋值。

板凳

[quote]第一程序中的x y z都是无符号型,所以z-y产生的结果是错误的。
第二个程序中,不能使用等号对字符串赋值,而要用strcpy()函数进行赋值。[/quote]
等号赋值的是字符串地址。

3 楼

“第一程序中的x y z都是无符号型,所以z-y产生的结果是错误的”,那为什么就是4294967246啊?

4 楼

[quote]“第一程序中的x y z都是无符号型,所以z-y产生的结果是错误的”,那为什么就是4294967246啊?[/quote]

要弄清下面这个概念就行了
在计算机系统中,数值一律用补码来表示(存储)。 
x = 50时,计算机内存储的是0x00000032
x = -50时,计算机内存储的是0xFFFFFFCE

5 楼

[quote][quote]“第一程序中的x y z都是无符号型,所以z-y产生的结果是错误的”,那为什么就是4294967246啊?[/quote]

要弄清下面这个概念就行了
在计算机系统中,数值一律用补码来表示(存储)。 
x = 50时,计算机内存储的是0x00000032
x = -50时,计算机内存储的是0xFFFFFFCE
[/quote]

回答的经典!

6 楼

为什么?x = -50时,计算机内存储的是0xFFFFFFCE

7 楼

为什么?x = -50时,计算机内存储的是0xFFFFFFCE

8 楼

你查查补码表示法,不要在这不停的问为什么!

补码表示法 最高位是符号位,即负数用 1 标识, 整数用 0 标识,所以无符号数中看到的就是一个很大的数!

 Dec      源码          补码          反码
  6       0 0110       0 0110       0 0110
 -6      1 0110       1 1010       0 1001

  你比较一下!

我来回复

您尚未登录,请登录后再回复。点此登录或注册