c语言,什么叫对数据的最高位?
题目:若int类型数据占两个字节,则下列语句的输出结果为()。intk=-1;printf("%d,%u\n",k,k);A)-1,-1B)-1,32767C)-1,32...
题目:若int 类型数据占两个字节,则下列语句的输出结果为()。
int k=-1;
printf("%d,%u\ n", k,k);
A)-1,-1B)-1,32767C)-1,32768D)-1,65535
答案:D)
解析:此题是考查C语言对有符号和无符号整型数据的处理,区别在于对数据最高位的解释上。对于一个有符号整数,C编译程序将把该值(二进制代码)的最高位作为符号标志位(符号标志位是0,表示正数;若为1,则表示负数);而对于一个无符号整数,该数的最高位将被作为数值位处理。设int型数据占两个字符,则-1在内存中应以16位全1来表示,因此当把k值按%d格式输出(即按有符号整数处理)时,仍为-1;而按%u格式输出(即按无符号整数处理)时,为65535(2的16次方减1)。
提问:
1、解析中的符号标志位是什么?
2、什么叫对数据的最高位?
3、什么叫对于一个无符号整数,该数的最高位将被作为数值位处理?数字位是什么?
4、-1在内存中应以16位全1来表示,怎么来的? 展开
int k=-1;
printf("%d,%u\ n", k,k);
A)-1,-1B)-1,32767C)-1,32768D)-1,65535
答案:D)
解析:此题是考查C语言对有符号和无符号整型数据的处理,区别在于对数据最高位的解释上。对于一个有符号整数,C编译程序将把该值(二进制代码)的最高位作为符号标志位(符号标志位是0,表示正数;若为1,则表示负数);而对于一个无符号整数,该数的最高位将被作为数值位处理。设int型数据占两个字符,则-1在内存中应以16位全1来表示,因此当把k值按%d格式输出(即按有符号整数处理)时,仍为-1;而按%u格式输出(即按无符号整数处理)时,为65535(2的16次方减1)。
提问:
1、解析中的符号标志位是什么?
2、什么叫对数据的最高位?
3、什么叫对于一个无符号整数,该数的最高位将被作为数值位处理?数字位是什么?
4、-1在内存中应以16位全1来表示,怎么来的? 展开
展开全部
第一个问题:符号标志位就是,比如int型为有符号整形,占两个字节,一共16位,最高位就是符号标志位,当输入-1放到int型时最高位就为1,此时的1是当符号标志位使用,不代表数值,1时表示存储的数为负数,0表示为负数。
第二个问题:是数据最高位,不是对数据最高位,比如10000000000000000,这个二进制数的最高位就是1。
第三个问题:%d就是以有符号十进制输出,%u是指无符号输出,当int型数据以无符号存储时存储值的范围为0-65535,当以有符号存储时存储值的范围为-32768-32767,以无符号存储时最高位的数就是代表值的大小,不代表正负,而以有符号存储时就代表正负。
第四个问题:数据在在内存中是以补码的形式来存储的,这又涉及到了另外一个问题,正数的补码就是其本身,而负数的补码就是自身绝对值的反码+1,-1的绝对值就是1,1以二进制存储为0000000000000001,它的反码为1111111111111110,+1时就是1111111111111111,也就是2的16次方减1.希望能解决你的疑惑啦
第二个问题:是数据最高位,不是对数据最高位,比如10000000000000000,这个二进制数的最高位就是1。
第三个问题:%d就是以有符号十进制输出,%u是指无符号输出,当int型数据以无符号存储时存储值的范围为0-65535,当以有符号存储时存储值的范围为-32768-32767,以无符号存储时最高位的数就是代表值的大小,不代表正负,而以有符号存储时就代表正负。
第四个问题:数据在在内存中是以补码的形式来存储的,这又涉及到了另外一个问题,正数的补码就是其本身,而负数的补码就是自身绝对值的反码+1,-1的绝对值就是1,1以二进制存储为0000000000000001,它的反码为1111111111111110,+1时就是1111111111111111,也就是2的16次方减1.希望能解决你的疑惑啦
展开全部
1和2 回答: 有符号整型范围 正数: 0000H ~ 7FFFH 负数: 8000H ~ FFFFH
你看看, 是不是最高位不同, 最高位就是符号位
3: 无符号整数范围: 0000H ~ FFFFH (十进制就是0 ~ 65535), 没有负数, 最高位也是数值
4: 因为0-1 在16位数中的结果就是 FFFFH , 如果在8位中 就是FFH
你看看, 是不是最高位不同, 最高位就是符号位
3: 无符号整数范围: 0000H ~ FFFFH (十进制就是0 ~ 65535), 没有负数, 最高位也是数值
4: 因为0-1 在16位数中的结果就是 FFFFH , 如果在8位中 就是FFH
追问
是不是有符号整型是0或1乘以原数,无符号型直接输出二进制代码?
追答
在计算机中, 都是二进制数
int 型在计算机中也是二进制表示的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据在计算机内部(内存上)是无类型的字节序列,每个字节(8位)是0~255。
为了表达更大范围的数字,我们把连续的两个字节(共16位),理解为一个数字,这样表示的范围可以达到0~65535;
为了能够表示负数,人们有规定了利用如何利用0~65535来表示负数的方法。
目前在计算中普遍使用的是补码的表示方法。这种方法规定,最高位是符号位,0表示正数,1表示负数,剩下15位表示数值。15位可以表示的范围是0~32767,如果是负数的话,把绝对值按位取反再加1,作为补码表示。以-1为例,先把1按位取反,得0xFFFE,再加1就是0xFFFF。
再来说一下有符号和无符号的问题。
int k=-1; 首先是int类型,就说明需要占用2个字节(在32位系统上int是4字节),k=-1,就在k的位置上(2字节)赋值为0xFFFF。
现在,这个位置上,如果按有符号的(也就是int),那数值是-1,如果按无符号的看,就是65535
为了表达更大范围的数字,我们把连续的两个字节(共16位),理解为一个数字,这样表示的范围可以达到0~65535;
为了能够表示负数,人们有规定了利用如何利用0~65535来表示负数的方法。
目前在计算中普遍使用的是补码的表示方法。这种方法规定,最高位是符号位,0表示正数,1表示负数,剩下15位表示数值。15位可以表示的范围是0~32767,如果是负数的话,把绝对值按位取反再加1,作为补码表示。以-1为例,先把1按位取反,得0xFFFE,再加1就是0xFFFF。
再来说一下有符号和无符号的问题。
int k=-1; 首先是int类型,就说明需要占用2个字节(在32位系统上int是4字节),k=-1,就在k的位置上(2字节)赋值为0xFFFF。
现在,这个位置上,如果按有符号的(也就是int),那数值是-1,如果按无符号的看,就是65535
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询