Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C、C++、数据类型、运算符和表达式_C++_C - Fatal编程技术网

C、C++、数据类型、运算符和表达式

C、C++、数据类型、运算符和表达式,c++,c,C++,C,答案是 c小于0 d小于0 c和d相等 但如果c的值更改为250200,则c和d不相等。什么是-1的ascii值。请解释编译过程。c和d是如何相等的大多数实现只是将位模式存储为带符号的8位整数,即-1的位模式,对于255,它是带有两个补码解释的0xFF。但这也是实现定义的行为。您的字符已签名,因此255不存在,相当于-1 使用python: void main() { char c=255; char d=-1; if(c<0) cout&l

答案是 c小于0 d小于0 c和d相等


但如果c的值更改为250200,则c和d不相等。什么是-1的ascii值。请解释编译过程。c和d是如何相等的大多数实现只是将位模式存储为带符号的8位整数,即-1的位模式,对于255,它是带有两个补码解释的0xFF。但这也是实现定义的行为。

您的字符已签名,因此255不存在,相当于-1

使用python:

void main()
{
    char c=255;
    char d=-1;
        if(c<0)
        cout<<"c is less than zero \n";
    else
        cout<<"c is greater than zero\n";
    if(d<0)
        cout<<"d is less than zero \n";
    else
        cout<<"d is greater than zero\n";
    if(c==d)
        cout<<"c and d are equal \n";
    else
        cout<<"c and d are not equal\n";

    cout<<d;
    getch();

}
这就是两者平等的原因

如果c为250,则变为:

In [3]: bin(-1&0xff)
Out[3]: '0b11111111'

In [4]: bin(255&0xff)
Out[4]: '0b11111111'
相当于-6

In [5]: bin(250&0xff)
Out[5]: '0b11111010'
你不是在操纵数字,而是在操纵数字的表示


这里我们不关心ascii表示,字符不是字符,而是数字。ASCII仅表示带符号的数字。

带符号字符的范围为-128到127。当您将255赋值给一个有符号的字符时,您会使其溢出,就像您要赋值-1一样,这就是它相等的原因。

有符号的字符的范围在[-128127]->[10000000011111] 未签名字符为[0255]

更改了c,d是无符号字符

输出为:

c大于零 d大于零 c和d相等

c和d相等是因为c和d都是255

默认情况下,所有基元数据类型都使用C语言进行签名。 char占用1字节8位内存,因此其范围为-128到127。 因此,每当它越过极限时,它就开始读取其范围的循环形式。 因此,当您选择c=128129130,…,255时,它将分别等于-128,-127,-126,…,-1,因为它从背面开始计数,以转换给定字符范围内的数字。 类似地,c=-129,-130,。。。。。将相当于`127126,。。。。等等
除非char在您的平台上是无符号的,或者大于一个八位字节,否则char c=255已经将您置于另一个世界中。通过为字符指定一个越界的int值,您正在使其溢出。python是如何出现在图片中的?
In [7]: bin(-6&0xff)
Out[7]: '0b11111010'