gjfyyds 发表于 2021-8-11 17:51:15

真的不会小甲鱼c语言教学中的取值范围一节

char 类型占一个字节的空间,因此 unsigned char 的取值范围是 0~255,signed char 的取值范围则是 -128~127。十进制的 255 即二进制的 11111111,signed char 第一位为符号位,因此其值转换为十进制后是 -1
signed char 第一位为符号位,因此其值转换为十进制后是 -1这个负一怎么出来的,这句话看不懂啊,什么东西十进制后变成负一的

wp231957 发表于 2021-8-11 18:12:00

二进制呢,全1带符号位就是-1

Max472 发表于 2021-8-11 18:19:03

wp231957 发表于 2021-8-11 18:12
二进制呢,全1带符号位就是-1

那 sign char 的 -127怎么表示?
不应该是 1111 1111吗?

wangka 发表于 2021-8-11 20:06:37

因为char的第一位是符号,符号在从二进制转换为十进制时候会默认为负号,懂了吗?
{:10_254:}
求最佳!!!

gjfyyds 发表于 2021-8-12 15:40:45

wangka 发表于 2021-8-11 20:06
因为char的第一位是符号,符号在从二进制转换为十进制时候会默认为负号,懂了吗?

求最佳!! ...

#include <stdio.h>

int main()
{
      signed char i;
      unsigned char j;

      i = 255;
      j = 255;

      printf("signed char %hhd\n", i);
      printf("unsigned char %hhu\n", j);

      return 0;
}
不是很懂为什么i输出来的是负一
char第一位符号指的是什么

jhq999 发表于 2021-8-12 17:14:28

二进制1111 1111(0xff),第一位的1就是符号位,如果符号位是1就是负数,然后算负号后面的值,取反加一,1111 1111取反就是0,加一就是1,1再结合前面的负号就是-1,
(0xf9)1111 1001 取反0000 0110,加一,0000 0111,就是-7.

jhq999 发表于 2021-8-12 20:21:41

本帖最后由 jhq999 于 2021-8-12 20:22 编辑

gjfyyds 发表于 2021-8-12 15:40
#include

int main()


128二进制(1000 0000)那个1就是符号位

wangka 发表于 2021-8-12 20:39:59

本帖最后由 wangka 于 2021-8-12 20:46 编辑

gjfyyds 发表于 2021-8-12 15:40
#include

int main()


因为,signed char 取值范围是-128到127......255超了,所以会显示中间数-1
符号位是指在计算机代码中表示正负的,
二进制你知道吧,
1指负号0是没有符号

求最佳!!!{:10_254:}
页: [1]
查看完整版本: 真的不会小甲鱼c语言教学中的取值范围一节