首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C语言取模,该如何处理

2013-09-05 
C语言取模int example 0xffffffffint *p &example example%0x100*p%0x1000xffffffff%0x100求大神

C语言取模

int example = 0xffffffff;
int *p = &example;
 
example%0x100;
*p%0x100;
0xffffffff%0x100;


求大神指点,这3个表达式的第一个和第二个为什么结果和第三个不一样 C
[解决办法]
没调试。
但估计就是有符号数,无符号数的问题。
前面的int是有符号数。0xffffffff好像是-1的补码吧,基本上忘完了。。。。。
后面的0xffffffff怎么说呢,算是常数,可能当成无符号数来处理了。或者做64位数处理了。

跟踪一下就清楚了。

是否会跟踪?
[解决办法]
unsigned int example = 0xffffffffu;
unsigned int *p = &example;
  
example%0x100u;
(*p)%0x100u;
0xffffffffu%0x100u;


常量也有类型。
 对负数取余,结果未定。

 C++ Integer Constants
 Integer constants are constant data elements that have no fractional parts or exponents. They always begin with a digit. You can specify integer constants in decimal, octal, or hexadecimal form. They can specify signed or unsigned types and long or short types.

 Syntax

 integer-constant :

 decimal-constant integer-suffixopt
 octal-constant integer-suffixopt
 hexadecimal-constant integer-suffixopt
 'c-char-sequence'

 decimal-constant :

 nonzero-digit
 decimal-constant digit

 octal-constant :

 0
 octal-constant octal-digit

 hexadecimal-constant :

 0x hexadecimal-digit
 0X hexadecimal-digit
 hexadecimal-constant hexadecimal-digit

 nonzero-digit : one of

 1 2 3 4 5 6 7 8 9

 octal-digit : one of

 0 1 2 3 4 5 6 7

 hexadecimal-digit : one of

 0 1 2 3 4 5 6 7 8 9
 a b c d e f
 A B C D E F

 integer-suffix :



 unsigned-suffix long-suffixopt
 long-suffix unsigned-suffixopt

 unsigned-suffix : one of

 u U

 long-suffix : one of

 l L

 64-bit integer-suffix :

 i64

 To specify integer constants using octal or hexadecimal notation, use a prefix that denotes the base. To specify an integer constant of a given integral type, use a suffix that denotes the type.

 To specify a decimal constant, begin the specification with a nonzero digit. For example:

 int i = 157;   // Decimal constant
 int j = 0198;  // Not a decimal number; erroneous octal constant
 int k = 0365;  // Leading zero specifies octal constant, not decimal

 To specify an octal constant, begin the specification with 0, followed by a sequence of digits in the range 0 through 7. The digits 8 and 9 are errors in specifying an octal constant. For example:

 int i = 0377;   // Octal constant
 int j = 0397;   // Error: 9 is not an octal digit

 To specify a hexadecimal constant, begin the specification with 0x or 0X (the case of the “x” does not matter), followed by a sequence of digits in the range 0 through 9 and a (or A) through f (or F). Hexadecimal digits a (or A) through f (or F) represent values in the range 10 through 15. For example:

 int i = 0x3fff;   // Hexadecimal constant
 int j = 0X3FFF;   // Equal to i

 To specify an unsigned type, use either the u or U suffix. To specify a long type, use either the l or L suffix. For example:

 unsigned uVal = 328u;             // Unsigned value


 long lVal = 0x7FFFFFL;            // Long value specified 
                                   //  as hex constant
 unsigned long ulVal = 0776745ul;  // Unsigned long value

热点排行