C语言深度解剖——读书笔记-2、关键字

1.6 signed、unsigned 关键字

规则:单纯的char 类型应该只用于字符值的存储和使用;有符号和无符号的 ”char“ 型变量只能用于数值的存储和使用。

char 有三种不同的类型:单纯 char 、signed char 及 unsigned char 。signed char 和 unsigned char 类型是用来声明数值的; 单纯 char 类型是真正的字符类型, 是用来声明字符的。单纯 char 类型有编译器环境决定,不能依赖。对于单纯 char 型,唯一允许的操作是赋值和相同运算符(=、==、!=)。

3个问题:

1、-0 和 +0 在内存里分别是怎么存储的?

答:由于在计算机中数值的存储都是以补码的形式存储的,所以-0 和 +0 在内存中都是按0000 0000存储的(如果是char类型)。

2、int i = -20; unsigned j = 10; i+j的值为多少?为什么?

答:如若按 %d 输出为 -10;按 %u 输出为一个很大的值。i + j 在这里做了隐式的转换

隐式转换各数据类型的级别高低。

隐式转换规则如下:

1. 程式在执行算术运算时,低类型能够转换为高类型。

2. 在赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。

3. 当在函数调用时,将实参值赋给形参,系统隐式地将实参转换为形参的类型后,赋给形参。

4. 函数有返回值时,系统将自动地将返回表达式类型转换为函数类型后,赋值给调用函数。


3、下面代码有什么问题?

unsigned i;
     
 for(i = 9; i >= 0; i--)
{
<span style="white-space:pre">	</span>printf("%u \n", i);  
}
答:输出的值为极大的值;主要原因是在输出时 %u 将 9 这个数值由 int 型转换为 unsigned 类型,编译器会把它当作一个很大的值。


1.7 if 、else 组合

a.对于bool类型的比较:FLASE都是0  TRUE不一定是1   所以应该用if(bool_num);    if(!bool_num);
对于浮点型与0比较要是否注意:不能直接比较,要定义精度,其实浮点型与浮点型比较也要注意这个问题,就是不能直接比较,要设定精度,如图:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值