关于 C 的 arithmetic conversion (进行 算术运算 时的 强制转换规则)
那本书里面都有啊啊!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2015-3-17更新~~~~~~~~~~~~~~~~~~~
先上两个解释我的疑惑的链接:
http://en.cppreference.com/w/cpp/language/operator_arithmetic
开始我是看 <<Expert C programming -- Deep C Secrets>>这本书(中文译作 C专家编程), chapter 1 里面的how quite is a quite change 这一小节, 有这样一段代码:
int main()
{
if(-1 < (unsigned char)1)
printf("-1 is less than (unsigned char)1: ANSI semantics.\n");
else
printf("-1 is NOT less than (unsigned char)1: K&R semantics.\n");
return 0;
}
然后改成这样
#include <stdio.h>
int main()
{
if(-1 < (unsigned int)1)//或者是unsigned
printf("1111111111.\n");
else
printf("222222222222222.\n");
return 0;
}
gcc 4.9.1编译运行(未加任何特殊编译选项)的结果是打印第二条. 而vs2013默认编译不通过, error:负数转变成了无符号数.
开始看 <<Expert C programming -- Deep C Secrets>>这本书这里时有点偷懒, 只记得了这两句话:
Operands with different types get converted when you do arithmetic. Everything is converted to the type of the floatest, longest operand, signed if possible without losing bits.
gcc警告强度开大一点就好了
sh-4.3# gcc -o main *.c -Wall -Wextra
main.c: In function 'main':
main.c:5:11: warning: comparison between signed and unsigned integer expressions [-Wsign-com
pare]
if(-1 < (unsigned ) 1)
^
实际上完整的规则还是本文开头的哪两个链接靠谱.
我觉得 best practice应当是尽量少用强制转换, 谁想去记忆那些无聊的规则.
转载于:https://www.cnblogs.com/likeatree/p/4345159.html
关于 C 的 arithmetic conversion (进行 算术运算 时的 强制转换规则)相关推荐
- w7提示无法关闭计算机,番茄花园windows7关闭电脑关机时提示强制关闭程序怎么办...
在win7系统中,关机时还有任务在运行的话,系统会等待所有程序自动结束后再执行关机,不过也会给用户提示是否强制关闭程序.很多番茄花园win7用户想取消强制关闭程序的提示,因为有些时候不点击就不会关机, ...
- git找回本地被覆盖或者删除的文件/确保本地代码为最新时,强制使本地文件覆盖git库文件
操作前提(老手可略过不看): 1.进入代码本地根目录下(也就是当初你提交到git库上的路径,特点是此目录下带.git文件夹) 2.在空白处点击右键 选择Git Bash Here进入git控制台 一. ...
- 硬盘故障时如何强制关机:Input/output error
如果硬盘可能会出现锁死或坏道的故障,会造成SHELL命令的失效,包括 reboot,powoff,,shutdown,用正常的命令是没法完成重启的. 执行这些命令,会出现如下IO报错: reboot ...
- Win XP系统无法关机时如何强制软关机
有没有试过Windows XP无法关机的故障?单击"开始"→"关闭计算机"选择关闭没有反应,按下组合键"Ctrl+Shift+Delete" ...
- Win XP操作系统无法关机时如何强制软关机
有没有试过Windows XP无法关机的故障?单击"开始"→"关闭计算机"选择关闭没有反应,按下组合键"Ctrl+Shift+Delete" ...
- linux c 绝对值函数,linux c 简介
--- title: linux c 简介 date: 2020-07-19 updated: 2020-07-19 --- # Preface # todo linux c http://blog. ...
- 数值分析笔记 - L2 - Floating Point Arithmetic(国外资料)
目录 1. Finite precision number systems 有限精度数字系统 1.1 Issues 问题 2. Normalised systems 规格化系统 2.1 A gene ...
- dos定义变量算术运算逻辑运算表达式分隔符
(1)自定义变量 请看如下命令: @echo off set myname=okbase.net set myage=3 echo %myname% is about %myage% years ol ...
- linux 算术命令,shell中进行算术运算的各种方法
shell中,无法直接进行算术运算,如果直接进行算术运算会出现如下情况. 从上图可以看出,默认情况下,shell不会直接进行算术运算,而是把"算术符号"当做"字符串&qu ...
最新文章
- linux madplay运行完成,Madplay移植到mini2440全过程详解
- redirect_uri参数错误解决方法
- scalikejdbc 学习笔记(2)
- 计算机没有autoCAD_挑战在一年内用晚上业余时间学会灵活运用CAD(1)|cad|autocad|图学|计算机|电子电路...
- 实例化bean的三种方式
- 【实战HTML5与CSS3 第一篇】初探水深,美丽的导航,绚丽的图片爆炸!!
- SharpDeveloeper开发ASP.NET MVC汗流浃背
- 10分钟带你逆袭kafka之路
- 蓝色简约好看的个人接单HTML源码
- bzoj 1676: [Usaco2005 Feb]Feed Accounting 饲料计算(差分)
- ELK实践(三)北京历年空气质量数据分析
- CodeMeter服务不能启动的解决方法,rslogix5000,无法启动,codemeter服务没有启动,
- [DAX] IF函数
- 苹果电脑Mac很久不用,accountsd Messages 登陆钥匙串一直提示输入密码 错误
- layui 动态增加时间
- oracle ORA-22992问题
- 讯飞webapi语音合成多音字处理
- 警惕黑客使用Lion系统漏洞破解和修改用户登陆密码
- 安装vue cli失败,显示this package has been deprecated in favour的解决办法
- React项目创建报错解决方案npm ERR! code 1 npm ERR! path E:\Node1\untitled5\node_modules\fibers npm ERR! command