ANSI C中的整型升级:

1)char,short int或者int型位段(bit-field),包括它们的有符号或无符号变型,

2)以及枚举类型,可以使用在需要int或unsigned int的表达式中,

3)如果int可以完整地表示源类型的所有值,那么该类型的值就转换为int,否则转换为unsigned int。

ANSI C中的寻常算术转换:

1)当执行算术运算时,操作数的类型如果不同,就会发生转换。

2)数据类型一般朝着浮点精度更高、长度更长的方向转换,

3)整型数如果转换为signed不会丢失信息,就转换为signed,否则就转换为unsigned。

4)这个称为值保留(value preserving)原则。

1. 代码:

#include <stdio.h>#define IS_UNSIGNED(a) (a >= 0 && ~a >= 0)int main()
{signed int a;unsigned int b;signed char c;unsigned char d;printf("a=%d, b=%d\n", IS_UNSIGNED(a), IS_UNSIGNED(b));printf("c=%d, d=%d\n", IS_UNSIGNED(c), IS_UNSIGNED(d));
}

2. 运行

D:\baoli\Desktop

λ .\a.exe

a=0, b=1

c=0, d=0

3. 分析

1)对于int型变量,可以使用

2)对弈char或short型变量,不适用

无论原先是否有符号,在~a >= 0中,char和short都被转换成了signed int(整型升级),然后再进行取反。

同时,常数0被认为是int(即signed int)类型,所以一律被判为有符号数了。

4. 改进

#define IS_UNSIGNED(a) ((a |= (0x1 << (sizeof(a)*8 - 1))) > 0 ? 1 : 0)

把变量的最高位置1,然后判断变量是否大于0。如果大于0,就是无符号数;否则就是有符号数。

5. 结果

D:\baoli\Desktop

λ .\a.exe

a=0, b=1

c=0, d=1

C语言高级编程:如何确定一个变量是有符号还是无符号数相关推荐

  1. c语言高级程序设计第五版PDF,C语言高级编程.pdf

    C语言高级编程 概述 由几个测试程序说开去 预编译与宏 高级预编译介绍 宏的高级用法 变量 变量分类详细解析 我的变量去哪儿了? 大小端对变量的影响 内存与指针 常见内存使用错误大观 指针,又是指针! ...

  2. 鼠标绘图 c语言,c语言高级编程技术教程 图形显示方式与鼠标输入.doc

    c语言高级编程技术教程 图形显示方式与鼠标输入 c语言高级编程技术教程 图形显示方式和鼠标输入 图形显示方式和鼠标输入 问题的提出编写程序,使用鼠标进行如下操作:按住鼠标器的任意键并移动,十字光 标将 ...

  3. 高级编程中C语言属于,c语言高级编程

    c语言高级编程 C高级编程 责任编辑:admin 更新日期:2005-8-6 深入了解C语言(函数的参数传递和函数使用参数的方法) tangl_99(原作) 关键字 C语言,汇编,代码生成,编译器 C ...

  4. matlab高级教程教材,MATLAB语言高级编程 PDF_IT教程网

    资源名称:MATLAB语言高级编程 PDF 本书共分8章,主要介绍了matlab的概述.matlab安装与工作桌面:matlab的编程基础,包括matlab的变量.matlab的运算符.矩阵的创建及运 ...

  5. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  6. 《go语言圣经》+《Mastering.GO-cn》+《go语言高级编程》PDF下载

    公众号[爱吃橙子的搬砖小徐]开通啦,后续将会同步更新,欢迎订阅 回复[java面试]获得两套面试宝典 回复[golang]获得go语言学习三部曲 <go语言圣经>+<Masterin ...

  7. 【嵌入式】C语言高级编程-可变参数宏(12)

    00. 目录 文章目录 00. 目录 01. 可变参数宏概述 02. ##符号 03. 可变参宏另外一种写法 04. 内核中的可变参数宏 05. 附录 01. 可变参数宏概述 #include < ...

  8. 【嵌入式】C语言高级编程-内建函数(11)

    00. 目录 文章目录 00. 目录 01. 内建函数概述 02. 常用内建函数 03. C 标准库的内建函数 04. 内核中的 likely 和 unlikely 05. 附录 01. 内建函数概述 ...

  9. 【嵌入式】C语言高级编程-内联函数(10)

    00. 目录 文章目录 00. 目录 01. 属性声明 02. 内联函数概述 03. 内联函数与宏 04. 编译器对内联函数的处理 05. static修饰内联函数 06. 附录 01. 属性声明 a ...

最新文章

  1. centos查看特定程序占用端口情况
  2. 了解下C# 类(Class)
  3. Magic Leap不带普通消费者玩了,疫情之下卖身未果,裁员一半求生
  4. php销毁three.js量,javascript – ThreeJS:从场景中删除对象
  5. 协方差矩阵的概念,算法以及自己的一些理解
  6. gdi画平滑直线_石膏几何体不会画?那是你没有画过这些,学会画石膏很简单,收藏...
  7. Powershell实战之管道参数绑定
  8. Kettle定时抽取两个库中的两个表到目标库SYS_OPLOG表
  9. java 服务端重复提交_java 服务器端验证重复提交
  10. java 静态代码块
  11. 统计.html,分类统计.html
  12. C++实现简易五子棋游戏
  13. 拼多多快捷回复怎么设置
  14. excel一列求和_excel中使用函数实现自动求和
  15. 【云原生】MYSQL语法总结
  16. 前端失业 3个月,尝试接私单的感触
  17. 孤儿文档是怎样产生的(MongoDB orphaned document)
  18. 图神经网络学习过程心得总结
  19. 布尔矩阵与个性化推荐系统(原创)
  20. Linux进程管理、防火墙

热门文章

  1. GCJ 2008 Round 1A Minimum Scalar Product( 水 )
  2. oracle查看和替换含不可见字符(空白)
  3. 乐游 游戏论坛开发第二阶段
  4. 网站页面HTML代码优化需要注意的问题
  5. 删除特定Dns后缀_DNS根服务器里存了世界上所有的域名吗?
  6. 教育教学知识与能力小学计算机,浅谈小学计算机教学论文
  7. java excel解析视频教程_java解析Excel(xls、xlsx两种格式)
  8. 828c语言程序设计_21计算机考研只考一门高级语言程序设计的院校大汇总!
  9. 威佐夫博弈(模板题)
  10. python多进程与多线程实验