#include "stdio.h"
signed char a= 0x80;
unsigned char b= 0x01;
void main (void)
{
if(b*a>1)
printf("promoted\n");
else if (b*a<1)
printf("why doesnt promotion work?");
while(1);
}
私は「「昇格予想を印刷するしかし、私が署名し、unsigned int型のデータ型、およびとして持つことができるなら、それはなぜ doesntの。?。予想通り正の数、0x01のように、例えば、0x80000000のaとb負の数は、「昇格」に印刷されます。
PLZは、私は問題が何であるかを理解するのに役立つ!
は
@ミステリー私はあなたの答えを理解していません。たとえそれがsigned int型に拡張されたとしても、それはそうだとは思えませんが、それを仮定すると、なぜunsigned intに昇格され、製品は+ ve番号になりますか? – Dom045
+1 - この回答は長いマイルで私よりもはるかに優れています(私はそれを削除しました) –
@ Dom045この仕様はそうだと言っています。 'signed char'と' unsigned char'は 'int'よりも低い型です。したがって、彼らは両方ともintに昇格されます。 'signed int'と' unsigned int'の場合、標準では両方が 'unsigned int'に変換されることが規定されています。ルールはここで見つけることができます:https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+Understand+integer+conversion+rules – Mysticial