2015-02-11 74 views
2

用C语言编程时,比如说我有一个整数h作为十六进制值,整数d作为十进制数。我可以在h和d之间进行加减运算吗?还是他们必须在同一个号码系统?十进制数可以用十进制数加/减吗?

+0

给它一个镜头,看看! http://ideone.com/是一个在线编译器,您可以在不安装任何软件的情况下使用这些测试程序。 – 2015-02-11 02:16:26

+0

我认为这个问题也混淆了“数字”和“数值”。 0x12,0d18,0o22和0b00010010都是代表相同“值”的“数字”。添加时,您可以添加值 - 不是数字。 – 2015-02-11 02:21:24

+3

您在“数字”和“表示”之间混淆。在内部,电脑有“数字”。外部(你看到并键入)有“表示”。十进制是一种表示。十六进制是一种表示。即使是“Q”也是一种表现。如果你输入一个十六进制表示和一个十进制表示(并以某种方式告诉计算机哪一个),它们都会被内部转换为“数字”,您可以添加或减少或不管其他内容,而不用担心用于输入数字的表示是十六进制或小数。 – 2015-02-11 02:21:28

回答

7

是的,你可以写:

int x = 100 - 0x100 + 0100; 

混合了十进制与十六进制和八进制。在计算发生之前,所有的值都被转换为二进制数(编译器将在本例中进行计算;它不会在运行时计算)。和任何常量可通过已分配适当的值的int值被替换为:

int d = 100; 
int h = 0x100; 
int o = 0100; 
int x = d + h + o; 
+0

像基地10,16,8三人。 – chux 2015-02-11 02:20:45

+0

为什么如果将1加到int'num'的十六进制值为'0x7fffffff'我得到'-2147483648',如果我将它改为'long'我得到正确的编号'2147483648''? – Zizoo 2017-05-04 20:57:27

+0

@Zizoo:名义上,这是一个可以单独提出/回答的新问题。如果你正在使用'sizeof(int)== 4 && sizeof(long)== 8'(例如64位Unix系统;不是Windows 64)的机器,那么这就是预期的, 或多或少。正式地,当值为'int'时,将1加到0x7FFFFFFF导致未定义的行为,因为它绕过(2^31)-1;通常情况下,它变为0x80000000,这是最负的32位有符号整数(在2的补码机器上)的十六进制表示。 _ [... continue ...] _ – 2017-05-04 21:04:59

0

是它们可以,例如

int x; 
x = 0x0F + 10; 
printf("%d\n", x); 

输出:

25 

表示你使用并不重要,它最终都将转换为二进制。