signed,unsigned关键字
2010-04-20 21:36
239 查看
一个32位的signed int类型整数其值表示法范围为:- 231~231 -1;8 位的
char类型数其值表示的范围为- 27~27 -1。一个32位的unsigned int类型整数其值表示法
范围为:0~ 232 -1;8位的char类型数其值表示的范围为0~28 -1。
一个有意思的程序:
intmain()
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a));
return 0;
}
结果输出:255
这道题貌似很简单!但是结果很让人惊讶!
结果分析:
按照负数补码的规则,可以知道-1 的补码为0xff,-2 的补码为0xfe……当i 的值为127
时,a[127]的值为-128,而-128 是char 类型数据能表示的最小的负数。当i 继续增加,a[128]
的值肯定不能是-129。因为这时候发生了溢出,-129 需要9 位才能存储下来,而char 类型
数据只有8 位,所以最高位被丢弃。剩下的8 位是原来9 位补码的低8 位的值,即0x7f。
当i 继续增加到255 的时候,-256 的补码的低8 位为0。然后当i 增加到256 时,-257 的补
码的低8 位全为1,即低八位的补码为0xff,如此又开始一轮新的循环……
按照上面的分析,a[0]到a[254]里面的值都不为0,而a[255]的值为0。strlen 函数是计
算字符串长度的,并不包含字符串最后的‘/0’。而判断一个字符串是否结束的标志就是看
是否遇到‘/0’。如果遇到‘/0’,则认为本字符串结束。
char类型数其值表示的范围为- 27~27 -1。一个32位的unsigned int类型整数其值表示法
范围为:0~ 232 -1;8位的char类型数其值表示的范围为0~28 -1。
一个有意思的程序:
intmain()
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a));
return 0;
}
结果输出:255
这道题貌似很简单!但是结果很让人惊讶!
结果分析:
按照负数补码的规则,可以知道-1 的补码为0xff,-2 的补码为0xfe……当i 的值为127
时,a[127]的值为-128,而-128 是char 类型数据能表示的最小的负数。当i 继续增加,a[128]
的值肯定不能是-129。因为这时候发生了溢出,-129 需要9 位才能存储下来,而char 类型
数据只有8 位,所以最高位被丢弃。剩下的8 位是原来9 位补码的低8 位的值,即0x7f。
当i 继续增加到255 的时候,-256 的补码的低8 位为0。然后当i 增加到256 时,-257 的补
码的低8 位全为1,即低八位的补码为0xff,如此又开始一轮新的循环……
按照上面的分析,a[0]到a[254]里面的值都不为0,而a[255]的值为0。strlen 函数是计
算字符串长度的,并不包含字符串最后的‘/0’。而判断一个字符串是否结束的标志就是看
是否遇到‘/0’。如果遇到‘/0’,则认为本字符串结束。
相关文章推荐
- signed ,unsigned 关键字
- 深入理解signed、unsigned 关键字
- 不带signed或unsigned关键字的char型 无符号数? 有符号数? C标准规定为 Implementation Defined !!!
- 不带signed或unsigned关键字的char型 无符号数? 有符号数? C标准规定为 Implementation Defined !!!
- 关键字-分节5(signed、unsigned)
- [C关键字]介绍第四弹—— signed、unsigned
- 不带signed或unsigned关键字的char…
- 关键字short、int、long、char、float、double、signed、unsigned的理解
- 不带signed或unsigned关键字的char…
- C语言深度剖析--读书笔记4_signed/unsigned关键字
- 《C语言深度解剖》signed,unsigned关键字后面3个问题的理解
- 对signed、unsigned 关键字的认识
- C语言中,unsigned与signed类型转换
- 关于signed和unsigned的隐秘bug
- C语言 unsigned与signed区别
- char,short,int,long,unsigned,signed
- compare signed with unsigned
- Unsigned or Signed
- unsigned vs. signed in C/C++
- C中signed与unsigned