一个32位的signed int类型整数表示的范围:-2^31~2^31-1

一个32位的unsigned int类型整数表示的范围: 0~2^32-1

一个8位的signed char类型整数表示的范围:-2^7~2^7-1

一个8位的unsigned char类型整数表示的范围: 0~2^8-1

示例:

int main()
{
char a[1000];
int i = 0;
for(i=0; i<1000; i++)
{
a[i] = -1 - i;
}
printf("%d\n", strlen(a));
return 0;
}

答案:255

分析:

当i的值为0时,a[0]的值为-1,关键就是-1在内存是如何存储的。

我们知道,在计算机内部数值一律使用补码存储。正数的补码与原码一致,负数的补码是符号位为1,其余位是该负数的绝对值按位取反后加1得到。

按照负数的补码规则,可以知道-1的补码是0xff,-2的补码是0xfe。。。当i的值为127的时候,a[127]的值为-128,是char能表示的最小的数值。当i=129时,a[128]=-129,这时候发生溢出,-129需要9位才能保存下来,但是char的类型数据只有8位,所以最高位被丢弃,剩下的8位是原来9位补码的低8位,为1000 0000,当i增加到255时候,a[255]=-256,-256的补码的低8位是0000 0000,然后i=256时,a[256]=-257的补码低8位为1111 1111,由此开始新一轮的循环。。。。

按照上面的分析,a[0]---a[254]的值都不为0,而a[255]的值为0,strlen函数是计算字符串长度的,并不包含字符串最后的'\0'。所以strlen(a)=255.

那么,+0和-0在内存是如何存储的呢?

十进制          原码            反码          补码

+0         0000 0000    0000 0000   0000 0000

-0        10000 0000    1111 1111   0000 0000

unsigned/signed int/char类型表示的数值范围的更多相关文章

  1. int *(*a[5])(int, char*)

    int* 表示是一个int型指针;(*a[5])(int, char*)中的a[5]表示是一个有5个元素的数组,而(*)(int, char*)则表示指向一个函数的指针,该函数有两个参数,第一个参数为 ...

  2. mysql数值字符串类型的按照数值进行排序

    今天遇到一个问题,就是对mysql数值字符串类型进行排序,在默认情况下使用order by 字段名称 desc/asc 进行排序的时候,mysql进行的排序规则是按照ASCII码进行排序的,并不会自动 ...

  3. signed char类型取值范围计算

    在C语言程序中,给定一个类型,如何计算这个类型变量的取值范围呢?比如有一个字符型变量定义如下: signed char c: 这个字符变量c的取值范围是[-128,127],是计算出来的呢? 假设字符 ...

  4. unsigned char 类型

    在蓝牙4.0的开发中,很多数据类型都用到了 unsigned char ,我觉得用这个类型的一个原因是相比较于整型,它占的空间更少. 比如: unsigned char a = 1;  // 占1个字 ...

  5. (C语言)char类型与int类型相加

    #include <stdio.h> int main(void) { ; ; int c = a + b; a += b; printf("c=%d",c); //p ...

  6. char类型的数值转换

    在视频教程中,你已经认识到了数字类型之间.字符串和其他类型之间的转换.而某些时候,我们还需要将char类型转换为int类型,或者把int类型转换为char类型. 这篇文章,将介绍在代码中虽然不太常用, ...

  7. 数据库unsigned char*类型图片存进

    loadimage1();测试: void Caccess_test_1Dlg::loadimage1()//存入unsigned char*类型的数据图片 { CFileException e; I ...

  8. int类型和char类型的区别

    下面三个定义式的区别: int i = 1; char i = 1; char i = '1'; int用来定义整型变量,char用来定义字符型变量,要清楚的知道三个定义式的区别,可以比较它们在内存中 ...

  9. 关于各种类型数据char、int、double、float 所占空间长度的计算,而char类型让我长姿势了

    #include <iostream> int main() { using namespace std; //int A=10; //double B=6; cout << ...

随机推荐

  1. Linux批量远程命令和上传下载工具

    https://github.com/eyjian/mooon/releases/tag/mooon-tools mooon_ssh:批量远程命令工具,在多台机器上执行指定命令 mooon_uploa ...

  2. JQuery EasyUI 1.5.1 美化主题大包

    https://my.oschina.net/magicweng/blog/833266

  3. 最完美的Linux桌面软件

    下面是关于Linux桌面环境下,目前为止最完美的部分.之所以说他们完美,是因为他们不但很养眼,而且也使用最好的多媒体技术,有最好的可用性.在某些方面,他们甚至超过了Windows和Mac-OS. 基础 ...

  4. Mac 下netstat和linux下不一样

    Linux's netstat command options and OS X(/BSD)'s have almost nothing to do with each other. Of the o ...

  5. USTC《现代软件工程》春季学期——第一次个人作业:词频统计

    截止日期 2018年3月29日23:59 要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等,文件夹内的所有文件)统计字符数. ...

  6. 14:super关键字

    本小节知识点: 1.super基本概念 2.super的作用 1.super基本概念 super是个编译器的指令符号,只是告诉编译器在执行的时候,去调谁的方法. self是一个隐私参数; self r ...

  7. Scala_方法、函数、柯里化

    方法.函数.柯里化 方法 声明方法: scala> def m1(x:Int,y:Int):Int = {     | x + y     | }m1: (x: Int, y: Int)Ints ...

  8. FNDLOAD使用大全

    FNDLOAD使用大全   Syntax FNDLOAD [username/password] 0 Y [mode] [configuration file] [target data file] ...

  9. [leetcode 14]Longest Common Prfix

    1 题目: Write a function to find the longest common prefix string amongst an array of strings. Hide Ta ...

  10. 用光的微粒说和广义相对论来解释衍射现象 Explanation of Diffraction Phenomenon by Particle Theory of Light and General Relativity

    历史上,物理学是用波动说来解释光的衍射现象.但用微粒说结合广义相对论同样可以做到. 把光看作粒子,当经过障碍物边缘时,由于广义相对论效应,边缘附近的空间被弯曲,使得不同路径的平行光发生偏转,落在障碍物 ...