我对有问题的数字和十六进制数以及它们在C中的算术中的使用有疑问。据我所知,有符号数通常能够存储比无符号数更小的数字。
例如,长度为32位的有符号整数的最大值为2,147,483,647;而无符号32位整数的范围最大为4,294,967,295。
在对最高可能值执行加法时,这些数字的值似乎会溢出:
in wordpress page use [special_function_shortcode]
and in php use
<?php echo do_shortcode('[special_function_shortcode]') ;?>
我得到的输出是:
printf("My integer: %i\n", 2147483647 + 1);
然而,尽管存在这种溢出,但十六进制数字串表示似乎格式正确并且对于加法操作是正确的。
My integer: -2147483648
我得到的输出是:
printf("My hexadecimal: %#X\n", 0x7FFFFFFF + 0x1); // 2147483647 + 1 in Hex
我的问题是,是否存在执行此类添加然后查看十六进制表示有益的任何情况?
乍一看,似乎这种方法可以让我们访问32位数的整个范围以进行加法操作。任何想法或意见表示赞赏。干杯
答案 0 :(得分:2)
有符号整数溢出为undefined behavior。这意味着你无法可靠地预测当你这样做会发生什么。
话虽这么说,你在这里看到的是一个例证,你的系统正在使用2补码来表示有符号整数中的负值。
虽然2的补充非常普遍,但它并不普遍。有些系统可能会使用符号位。因此,为了获得最大的可移植性,您不应该依赖于此行为。