C、C++、数据类型、运算符和表达式
答案是 c小于0 d小于0 c和d相等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的值更改为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'