C语言运算符优先级问题.docx
文本预览下载声明
1级优先级(左结合) () 圆括号;[]下标运算符;-指向结构体成员运算符;. 结构体成员运算符。?2级优先级(右结合) !逻辑非运算符;~按位取反运算符;++前缀增量运算符;--前缀减量运算符;+正号运算符;-负号运算符;(类型)类型转换运算符;*指针运算符;地址运算符;sizeof长度运算符。??3级优先级(左结合) *乘法运算符;/除法运算符;%取余运算符。?4级优先级(左结合) +加法运算符;-减法运算符。?5级优先级(左结合) 左移运算符;右移运算符。?6级优先级(左结合) 、=、、=关系运算符。?7级优先级(左结合) ==等于运算符;!=不等于运算符。?8级优先级(左结合) 按位与运算符。?9级优先级(左结合) ^按位异或运算符。?10级优先级(左结合) |按位或运算符。?11级优先级(左结合) 逻辑与运算符。?12级优先级(左结合) ||逻辑或运算符。?13级优先级(右结合) ? :条件运算符。?14级优先级(右结合) =、 +=、 -=、 *=、 /=、 %=、 =、 ^=、 |=、 =、 =赋值运算符。?15级优先级(左结合) ,逗号运算符。看看基础其实也不错,很多时候发现,自己敲代码犯的错误都是基础的知识不牢固,所以常回顾是必要的!?在做欧拉项目的时候,有时候定义的数据类型太窄,不知并不觉的就溢出了,而自已还在很二的调试,下面是仅就int形的定义:C语言中int类型的字节长度int这个数据类型比较特殊,具体分配的字节数与机器字长和编译器有关。如果要保证移植性,尽量用__int16 __int32 __int64,且__int16、__int32,__int64(都是两个下划线) 这些数据类型在所有平台下都分配相同的字节。所以在移植上不存在问题。所谓的不可移植是指:在一个平台上编写的代码无法拿到另一个平台上运行时,不能达到期望的运行结果。例如:在32为平台上(所谓32位平台是指通用寄存器的数据宽度是32)编写代码,int类型分配4个字节,而在16位平台是则分配2个字节,那么在16位上编译出来的exe,其中是为int分配2字节,而在32位平台上运行时,会按照4个字节来解析,显然会出错误的!!而对于非int类型,目前为止,所有的类型分配的字节数都是兼容的,即不同平台对于同一个类型分配相同的字节数!!建议:在代码中尽量避免使用int类型,根据不同的需要可以用short,long等代替。数据类型名称字节数? ? ? ? ? ? ? ? ?别名? ? ? ? ? ?取值范围?int? ?? ? ? ? ? ? ? ? ? * ? ? ? ? ?signed,signedint? ? ? ? ? ?由操作系统决定,即与操作系统的"字长"有关?unsigned int? ? ?*? ? ? ? ? ? ? ? ??????????unsigned? ?由操作系统决定,即与操作系统的"字长"有关__int8? ? ? ? ? ? ? 1 ? ? ? ? ? ? ?char,signed char? ? ? ??–128 ~ 127__int16? ? ? 2 ? ??short,shortint,signed short int? ??–32,768 ~ 32,767__int32? ? ? 4 ? ? ? ?signed,signedint? ??????????????????????????–2,147,483,648 ~ 2,147,483,647__int64? ? ? 8 ? ? ? ? ? ? ??无? ? ?-9,223,372,036,854,775,808~9,223,372,036,854,775,807bool? ? ? ? ? ? ? ? ??????1? ? ? ? ? ? ? ? ? ? ? ? ? ??无? ? ? ? ? ? ? ? ? ? ?????????false 或 truechar? ? ? ? ? ? ? ? ? ? ??1? ? ? ? ? ? ? ??signed char? ? ? ? ? ??–128 到 127unsigned char ? ??1?????????????????????????????????????无? ??????????????0 到 255short? ??????????????2short int,signed short int? ??????–32,768 到 32,767unsigned short2unsigned short int0 到 65,535
显示全部