c语言 无符号数 结构体指针 整型提升
2017-12-21 22:18
323 查看
12月21日随笔
12月21日随笔无符号数 unsigned
结构体指针
整型提升
关于编译顺序的问题
本文有后续详细讲解
无符号数 unsigned
它和普通的变量定义是一样的,只不过差别在于系统对这块内存空间的识别不同。在下例中给n传的实参是-1,在函数中以%d打印仍是-1.而以无符号数打印则是32位全1的二进制数转换的整数。#include <stdio.h> void func(unsigned int n){ printf("%d\n",n); //-1 printf("%u",n); //4294967295 } int main(){ int a =-1; func(a); }
结构体指针
结构体实例使用 . 访问成员结构体指针使用 -> 访问成员更为便捷
-> 其实执行了两步,首先解引用指针,然后作为实例访问结构体变量。
struct stu s; struct stu* p = &s; (*p).age = 9; p->age = 9;
整型提升
例如char a = 1; char b = 127; char c = a + b; printf("%d %d",a + b, c); // 128 -128(10000000)负零解析为-128
C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字 符和短整型操作数在使用之前被转换为普通整型,这种转换称为『整型提升』。
在上例中a和b都被提升为整型来参与运算,
a = 00000000..00000001 b = 00000000..01111111 相加 = 00000000..10000000 //128 //而保存在c中以后,最高位变成符号位 c = 10000000 //-128
关于编译顺序的问题
c = (++a) + (++a) + (++a) ;
上述表达式在不同的编译器中编译结果是不尽相同的,仅从运算符优先级和结合型不能确定最终的值。比如上式不能知道在编译后到底是先执行完三个括号里的自加,还是先执行前两个括号然后相加再执行后一个括号。这种式子属于错误表达,没有研究的价值。
相关文章推荐
- C语言指针与结构体,示例代码
- C语言 指向结构体数组的指针
- C语言结构体里的成员数组和指针
- 12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!
- C语言04 - 结构体、结构体指针、tyepdef、union、enum
- c语言结构体与指针
- C语言之_指针数组、结构体、动态内存分配
- C语言实现类中方法 用函数指针在结构体中加入函数
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
- [面试算法]有一无符号整型数组,大小为10, 初始的数值随机,但在[0, 99]之间。请用C语言写一个过滤程序,令数组内的数据互不相等。
- C语言 一个例子说明结构体变量,结构体数组和结构体指针
- C语言 结构体和指针详解及简单示例
- C语言的结构体中的位域在 有符号不定位数的数值中操作
- C语言之_指针数组、结构体、动态内存分配
- C语言用结构体指针作函数参数
- C语言_了解下结构体指针
- 20170128C语言提升02_结构体和union和void
- C语言的指针、数据、结构体关系总结
- c语言回顾(指针 结构体 文件)
- C语言用结构体指针作函数参数