C 常量的类型

it2022-05-13  57

http://bbs.csdn.net/topics/380028485

整型常量的类型是下列相应表中第一个能表示其值的类型:

int --> long int --> long long int

无后缀的十进制整数常量:int,long int,long long int以字母u或U为后缀的十进制整型常量:unsigned int,unsigned long int,unsigned long long int以字母l或L为后缀的十进制整型常量:long int,long long int同时以字母u或U和字母l或L为后缀的十进制整型常量:unsigned long int,unsigned long long int以字母ll或LL为后缀的十进制整型常量:long long int同时以字母u或U和字母ll或LL为后缀的十进制整型常量:unsigned long long int无后缀的八进制或十六进制常量:int,unsigned int,long int,unsigned long int,long long int,unsigned long long int以字母u或U为后缀的八进制或十六进制常量:unsigned int,unsigned long int,unsigned long long int以字母l或L为后缀的八进制或十六进制常量:long int,unsigned long int,long long int,unsigned long long int同时以字母u或U和字母l或L为后缀的八进制或十六进制常量:unsigned long int,unsigned long long int以字母ll或LL为后缀的八进制或十六进制常量:long long int,unsigned long long int同时以字母u或U和字母ll或LL为后缀的八进制或十六进制常量:unsigned long long int

http://www.rapidtables.com/prog/cref/const.htm 

Numbers characters and string constants.

See enum end const in data types page.

Data Type Constants

SyntaxDescriptionExample

0xhexnum

0Xhexnum

hexadecimal numberint x=0x7FFF0000;

0 octnum

octal numberint x=07654321;

num u

num U

unsigned integer number constantunsigned int x=1000U;

num l

num L

long integer number constantlong x=-99999L;

num ul

num UL

unsigned long integer number constantunsigned long x=99999L;

num ll

num LL

long long  integer number constantlong long x=-888888LL;

num ull

num ULL

unsigned long long integer number constantunsigned long long x=100ULL;

num f

num F

float number constantfloat x=0.005F;

num l

num L

long double number constantlong double x=0.005L;

num e±exp

num E±exp

floating point exponent number constantdouble x=5.2E-3;

'char'

character constantchar c='A';

"string"

string constantchar name[6]="Hello";

http://stackoverflow.com/questions/7036056/what-do-0ll-or-0x0ul-mean

These are constants in C and C++. The suffix LL means the constant is of type long long, and UL means unsigned long.

In general, each L or l represents a long and each U or u represents anunsigned. So, e.g.

1uLL // means the constant 1 with type unsigned long long.

 

This also applies to floating point numbers:

1.0f // of type 'float' 1.0 // of type 'double' 1.0L // of type 'long double'

 

and strings and characters, but they are prefixes:

'A' // of type 'char' L'A' // of type 'wchar_t' u'A' // of type 'char16_t' (C++0x only) U'A' // of type 'char32_t' (C++0x only)

In C and C++ the integer constants are evaluated using their original type, which can cause bugs due to integer overflow:

long long nanosec_wrong = 1000000000 * 600; // ^ you'll get '-1295421440' since the constants are of type 'int' // which is usually only 32-bit long, not big enough to hold the result. long long nanosec_correct = 1000000000LL * 600 // ^ you'll correctly get '600000000000' with this int secs = 600; long long nanosec_2 = 1000000000LL * secs; // ^ use the '1000000000LL' to ensure the multiplication is done as 'long long's.

In Google Go, all integers are evaluated as big integers (no truncation happens),

var nanosec_correct int64 = 1000000000 * 600

and there is no "usual arithmetic promotion"

var b int32 = 600 var a int64 = 1000000000 * b // ^ cannot use 1000000000 * b (type int32) as type int64 in assignment

so the suffixes are not necessary.

 

转载于:https://www.cnblogs.com/shangdawei/p/3150554.html


最新回复(0)