Code Bye

类型变量的取值范围求指导答

printf(“signed char min = %d\n”,-(char)((unsigned char)~0 >> 1));
printf(“signed char max = %d\n”,(char)((unsigned char)~0 >> 1));
问一下char类型的最小值不是应该是-128吗?为什么按书上代码来编译结果是-127
还有问一下为什么要将0的二进制取反的结果转换为unsigned char类型,并且还要算术右移一位?这样做的目的是什么?
为什么两个代码前面一个有负号一个没有呢?
解决方案

20

引用:
Quote: 引用:

为什么要将0的二进制取反的结果转换为unsigned char类型,并且还要算术右移一位?这样做的目的是什么?
原因是整数常量默认类型是int,所以要转成unsigned char.右移一位是把符号位空出。
为什么两个代码前面一个有负号一个没有呢?
原因是求最小值所以有负号,最大值所以没有

本人这里想问的是既然是求的signed char,为啥要从int转换成unsigned char呢,不是很理解

原因是需要逻辑右移,假如是转成有符号,就是算术右移,算术右移最高位还是添1,这样等于没移


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明类型变量的取值范围求指导答