精华内容
下载资源
问答
  • C语言中signed和unsigned理解

    千次阅读 2019-10-08 07:16:37
    一直在学java,今天开始研究ACM的算法题,需要用到C语言,发现好多知识点都不清楚了,看来...unsigned意思无符号的,所有的位都大小,没有负数,例如:unsignedint大小区间:0-255 当然默认signed 如果想...

    一直在学java,今天开始研究ACM的算法题,需要用到C语言,发现好多知识点都不清楚了,看来以后要多多总结~

    signed意思为有符号的,也就是第一个位代表正负,剩余的代表大小,例如:signed int 大小区间为-128-127

    unsigned意思为无符号的,所有的位都为大小,没有负数,例如:unsigned int 大小区间为:0-255

    当然 默认为signed


    如果想要明白singed与unsigned的区别,除了这两个基本知识,还需要了解整数在计算机中的存储方式,以16-bit 计算机为例,

    定义 int a = 1; 那么a的存储方式用表格来表示 


    0000000000000001



    首先需要提到的一点是,在C语言中十进制的整数都会转化为二进制存储在计算机。

    继续,上面所声明的 int a = 1,也就是 int signed a =1,C语言默认a是一个signed类型。上面表格中最左端的为最高位,最右端的为最低位。

    signed类型的整数,只用了去除最高位,剩下的15位来进行编码的,而最高位只是用来做标记(sign),标记整数的正负,0表示正,1表示负。所以对于signed的整数,的存储范围是(-2^15 to 2^15-1),也就是 -32768 到 +32767的整数。 
    而对于unsigned的整数,其16位全部用来编码,存储范围便是(0 to 2^16-1),即 0到 65535 的非负整数。所以呢 你可以声明 int a = 1,或者 int a = -1, 但是不可以声明 unsigned a = -1 。但是需要提到的一点是,不管整数的类型是signed 还是 unsigned,都用了16位来存储,也就是说16位全部用来存储数据 

    转载于:https://www.cnblogs.com/lyxcode/p/9449466.html

    展开全文
  • unsigned/signed是C语言中的类型指示符(type specifier),signed 指示被声明的对象的类型有符号整型(signed integer type),unsigned 指示被声明的对象的类型无符号整型(unsigned integer type)。那啥...

          unsigned/signed是C语言中的类型指示符(type specifier),signed 指示被声明的对象的类型为有符号整型(signed integer type),unsigned 指示被声明的对象的类型为无符号整型(unsigned integer type)。那为啥可以与char一起用了?

    我们的char型数据用于存储字符(如,字母或标点符号),但是从技术角度,char是整型类型。因为char类型实际上存储的是整型而不是字符。计算机使用数字编码来处理字符,即使特定的整型表示特定的字符。所以char可以使用unsigned/signed来修饰。

    展开全文
  • unsigned 表示数据的最高位是数据位 一般用于保存数据类信息 比如摄像头采集的信息 cpu的信息什么的 void 在定义数据类型是加入void 其实就是一个简单的占位符 在使用数据时候根据使用情况在强制类型转换 洗白goto...

    有无符号位置

    signed 和unsigned

    其实就是很简单的逻辑:存储数据的空间的最高位 是符号(+ -号什么的)还是数据

    signed 表示数据的最高位是符号位  一般用于保存数字类信息 一般我们默认的比如 int a  其实就是 signed int a ;
    unsigned 表示数据的最高位是数据位  一般用于保存数据类信息 比如摄像头采集的信息 cpu的信息什么的
    

    void

    在定义数据类型是加入void 其实就是一个简单的占位符 在使用数据时候根据使用情况在强制类型转换
    

    洗白goto

    大一学C的时候老师告诉我一般不要用C 但是最近看各种源码的时候发现全是goto   
    一句话说明: goto 可以用但是要在一个函数内部作用很大很便捷   不要在不同函数内使用
    

    类型修饰符

    类型修饰符就是资源属性中位置的限定
    一句话说明: 就是 定义数据在内存中存放的位置

    auto

    当做占位符理解 默认定义数据不说明类型修饰符的时候都是auto 可读可写
    

    register

    最近在学cuda 对这个在熟悉不过了 定义数据内存在寄存器中  直接属于cpu的缓存空间读取速度飞快 但是空间有限少用。
    

    static

    1函数内部
    2函数外部
    3修饰函数
    改天仔细写
    

    const

    只读标识符  但是不是不能改可以从内存修改但是不能直接修改
    
    extern
    改天仔细写
    
    volatile
    防优化 除了嵌入式一般用不到
    
    展开全文
  • 在C语言中,signed/unsigned用于修饰整数变量,signed表示有符号的,unsigned表示无符号的。今天就带大家了解一下关键字signed和unsigned 。 1、signed sign的本意是“标记,做记号”,ed后缀有一种完成时的...

    在C语言中,signed/unsigned用于修饰整数变量,signed表示有符号的,unsigned表示无符号的。 今天就带大家了解一下 关键字signed和unsigned 。

     

    1、signed

    sign的本意是“标记,做记号”,ed后缀有一种完成时的感觉,这里表示的是有符号的。

    signed关键字是ISO/ANSI C90标准新增的,其常见于整数类型的符号规定处 。

    signed的作用是:声明有符号类型的整数类型。

    其实说signed很常见也不见得,因为我们常用的int、short和long,以及long long,默认情况下都是signed有符号的

    所以相比起来unsigned的戏份可能比signed更多,signed在这里只是相当于刻意地去说明其后面的变量是有符号类型的

    signed int a; /* 通常这里带signed的变量定义都可以省略掉signed,因为signed本身就是默认的 */

    signed short int b;

    signed short c;

    signed long int d;

    signed long e;

    signed long long f;

    unsigned int g;      /* 写上signed后,上面的定义似乎在刻意地大声说“上面这些变量应该是有符号的” */

    unsigned short h;    /* 但一般unsigned的戏份还是比signed多,signed关键字和auto关键字的宿命类似 */

    有符号数在计算机中的的表示方法:在计算机内部,是用补码表示有符号数

    -正数的补码是其本身

    -负数的补码为负数的绝对值得各个位取反加1

    举个例子:

    8位整数 5的补码为:0000 0101

    8位整数 -7的补码为:取绝对值|-7| = 7 --> 二进制为 0000 0111 --> 各个位取反 1111 1000 -->最后加1 -->1111 1001,所 以-7在计算机中就表示为1111 1001。

    16位整数 20的补码为:0000 0000 0001 0100

    16位整数 -13的补码为:1111 1111 1111 0011(可自行推导)

     

    2.unsigned

    unsigned意为“没有标记过的”,在C语言中表示无符号的,与关键字signed对应

    这个关键字在很多头文件的变量定义中还是很常见的,一般用在整数类型的符号说明处

    unsigned的作用是:声明无符号的整数类型。

    unsigned的使用和signed类似,unsigned一般加在int等整数类型名称前: 

    /* unsigned可以修饰的几种类型 */

    unsigned int a;        /* 无符号整型 */

    unsigned short b;      /* 无符号短整型 */

    unsigned long c;        /* 无符号长整型 */

    unsigned long long d;  /* 无符号long long类型 */

    引入signed和unsigned的概念后,就要严格注意输入输出时候的格式了。

    printf("%d, %u", a, b); /* %u是unsigned类型的说明符 */

    printf("%u, %d", a, b);  /* 如果对signed类型的变量用%u,那就不会去找内存中的符号位,全部当数字位处理 */

                              /* 这时显示的结果可能与signed本身想表达的值差异很大,数字0情况除外 */

    unsigned short c = 4;

    printf("%hu");            /* %h是短整型,%hu表示无符号短整型 */

    unsigned long d = 5;     

    printf("%lu");            /* %l是长整型,%lu表示无符号长整型 */

    对于long和long long常量,能使用后缀直接给出unsigned的属性:

    120L; /* L后缀表示long常量 */

    120LU;        /* 再加上U后缀表示unsigned */

    120LLU;      /* LLU表示unsigned long long */

    120ull;      /* ull这样写也对 */

    无符号数在计算机中的表示方法:计算机用原码表示无符号数

    -无符号数默认为正数n

    -无符号数没有符号位无符号数最小值为0,最大值为其所占的位数全为1时的值。

    例如 

    8位无符号整数,最小值为0,最大值为二进制1111 1111,转换为十进制就是255。

    对于固定长度的无符号数,

    MAX_VALUE + 1 = MIN_VALUE        

    MIN_VALUE - 1 = MAX_VALUE

    C语言中变量默认 为有符号的类型,如要将变量声明为无符号数,则需要使用unsigned关键字(C语言中只有整数类型能够声明为unsigned无符号变量)。 

    #include

    int main()

    {

    int i; //默认i为有符号数

    signed int j; //显示声明j为有符号数

    unsigned char min_value = 0; //显示声明k为无符号数

    unsigned char max_value = 255;

    unsigned char sub_result = min_value - 1; //无符号数最小值 - 1 = 最大值

    unsigned char add_result = max_value + 1; //无符号数最大值 + 1 = 最小值

    printf( "%d\n", sub_result ); //分析输出 255

    printf( "%d\n", add_result ); //分析输出 0

    return 0;

    }

    输出结果 :

    255

    0

     

    3、signed和unsigned的区别

    总结:signed和unsigned用于修饰整数类型(包括char,从ANSI C89标准开始支持)。

    signed是默认的 ,表示这个变量是有符号的, 也就是可以存储整数和负数

    unsigned则需要显示给出,表示这个变量没有符号值能存储数的大小,而不能表示正负

    signed存储符号是有代价的,代价就是存储空间中的一个比特位,专门用来存储符号,这一位不能表示数值

    所以 ,一般来说 ,同类型的signed能够存储的数的绝对值大小要小于unsigned

    默认的int、short、long、long long为有符号数;换言之,int等价于signed int,short等价于signed short,long等价于signed long,long long等价于signed long long。

    但是char本身是signed char还是unsigned char,取决于语言的实现(编译器)。

    数据类型范围列表如下:

     

    总之,signed和unsigned的区别基本就在于是否把存储的某一位看做符号位,unsigned时不看符号位,所以unsigned一般表示的是非负数

    注意:

    整数类型占多少字节空间是不确定的,只能保证sizeof(short) <= sizeof(int) <= sizeof(long)。

    在32位的设备平台上,short为16位(2字节), int为32位(4字节),long为32位(4字节),long long为64位(8字节)。

    在64位的设备平台上,short为16位(2字节), int为32位(4字节),long为64位(8字节),long long为64位(8字节)。

    4、为什么一定要区分signed和unsigned?

    看两种情况:signed和unsigned分别存储正数和负数,默认最高位为符号位

    (1)正数6,分别用signed和unsigned方式在一个字节中存储:0000 0110 [signed]   0000 0110 [unsigned]

    (2)int类型的负数-5和正数4294967291在4个字节中的存储:FFFF FFFB [十六进制]

    上述例子有一个特点,就是不同变量在内存中的存储形式是一样的

    由于0表示正,所以signed和unsigned的正数在内存中的表示是一样的

    而同样的一个存储,在signed和unsigned下就可能表示两个不同的数(0除外)

    所以unsigned类型的数一般要在输入和输出的时候刻意去注意。

    文章参考来源:

    https://blog.csdn.net/wen381951203/article/details/79922220

    https://blog.csdn.net/Johan_Joe_King/article/details/84201039

     

    如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!

    C语言C++学习企鹅圈子】,分享(源码、项目实战视频、项目笔记,基础入门教程)

    欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

    编程学习书籍:

     

    编程学习视频:

     

     

    展开全文
  • unsigned int 32比特数据范围-2147

    千次阅读 2021-05-21 15:56:07
    提到unsigned,大家应该都了解,有朋友问c语言中unsigned什么意思,还有人想问c语言中的unsigned什么意思,这到底是咋回事?事实上unsigned呢,下面是小编推荐给大家的unsigned int,下面我们一起来看看吧!...
  • 标识符是一个由程序员定义的名称,标识区别变量、函数和数据类型等,代表程序的某些元素,变量名就是标识符的一个展现。 命名规则: C++语言的标识符由数字(0~9),大写字母(A~Z),小写字母(a~z)以及下划线...
  • 规则是:1、标识符的第一个字符必须是字母(a~z或A~Z)或下划线(_);2、后面跟的字符是由任意字母、下划线(_)、数字组成;3、标识符中的大小写字母是有区别的,代表不同含义;4、标识符不能是关键字。c语言合法标识符...
  • c语言标识符什么组成

    千次阅读 2021-05-18 13:01:13
    本文收集整理关于c语言标识符什么组成的相关议题,使用内容导航快速到达。内容导航:Q1:C语言中标识符的构成有什么要求?标识符使用来标识源程序中的某个对象的名字的,这些对象可以是语句、数据类型、函数、变量...
  • 什么是C语言的合法标识符? C语言标识符是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义,标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。...
  • UNSIGNED关键字的解释和用法

    千次阅读 2018-11-05 12:02:25
    举个例子,比如 tinyInt ,微整型数据类型,占一个字节,也就是 28 ,-127~128 是他的取值范围,但是添加 UNSIGNED 之后,他就是真正实现了 28,即 256,这个时候就没有负数了,当主键 id 设为UNSIGNED后可以充分...
  • "int", "long", "register", "return", "short", "signed", "sizeof", "static", "struct", "switch", "typedef", "union", "unsigned", "void", "volatile", "while" }; int iskeyword(const char *str) { int i; ...
  • C语言标识符分类 第一类:关键字 定义 由C语言规定的具有特定意义的字符串,通常也称为保留字。例如 int、char、long、float等。相当于已经被C语言本身特殊使用了的标识符,不可以再定义。在定义标识符的时候不能与...
  • c语言中操作符和标识符有哪些区别和联系以下文字资料是由(历史新知网www.lishixinzhi.com)小编大家搜集整理后发布的内容,让我们赶快一起来看一下吧!c语言中操作符和标识符有哪些区别和联系标识符就是由字母、...
  • 标识符定义变量时,我们使用了诸如 a、abc、mn123 这样的名字,它们都是标识符(Identifier)。标识符就是程序员自己起的名字,除了变量名,后面还会讲到函数名、宏名、结构体名等,它们都是标识符。不过,名字也不能...
  • C++语言标识(zhi)符的命名规则及注意标识符是一个字符序列,用来标识变量、函数、数据类型等。C++语言的标识符由数字(0~9),大写字母(A~Z),小写字母(a~z)以及下划线(_)组成,其中字母要区分大小写。以下是命名时的...
  • (加L后说明10000是一个长整型常量,而不是一个基本整型常量) 注:(1) C语言系统默认有符号整数。 (2) unsigned和signed不能同时出现。 (3) short和long不能同时出现。 实型常量: 在C语言中,实型常量的两种表现...
  • C++语言标识(zhi)符的命名规则及注意标识符是一个字符序列,用来标识变量、函数、数据类型等。C++语言的标识符由数字(0~9),大写字母(A~Z),小写字母(a~z)以及下划线(_)组成,其中字母要区分大小写。以下是命名时的...
  • C语言标识符

    万次阅读 多人点赞 2019-04-16 20:53:49
    5.5 标识符 标识符是C程序的最基本组成部分,例如:变量名称、函数名称、数据类型等等,都是一个标识符标识符的要求是:必须由字母(区分大小写)、数字、下划线组成。而且,标识符的第一个字符不可以是数字。...
  • c语言中标识符命名规则是怎样的

    千次阅读 2021-05-19 11:02:43
    什么是变量?一句话,变量是存储数据的值的空间。由于数值的类型有多种,有整数、小数(浮点数)、字符等等,那么对应的变量就有整型变量、浮点型变量、字符型变量。变量还有其他的具体分类。整型变量还可具体分为无...
  • C语言标识符的分类

    2021-05-18 17:20:25
    C语言标识符的分类标识符不能与程序中具有特殊意义的关键字相同,不能与用户编制的函数名、C语言库函数相同,在程序中各种标识符尽量不要重复,以便区分。C语言标识符的分类有哪些呢,一起来了解一下!1、关键字...
  • 超全的C语言标识符知识

    千次阅读 2021-05-21 10:38:45
    我们用一个简单的c程序例子,介绍c语言的标识符教程,加深小伙伴们对C语言的标识符认识。例1:计算两个整数之和的c程序:#includemain(){int a,b,sum; /*定义变量a,b,sum整型变量*/a=20; /*把整数20赋值给整型...
  • 满意答案小笑狐7772014.05.17采纳率:51%等级:12已帮助:5875人在c语言中scanf可以作为用户自定义的标识(示)符,因为他不是c编译系统已经预定义的、具有特殊用途的保留标识符(即关键字),常见的关键字有:float,...
  • 第6章C语言的标识符.第6章 C语言的标识符、关键字和数据类型6.1 标识符和关键字标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、常量、数组等。一个标识符由字符串、数字和...
  • ss cdeclfar near huge interrupt pascal由ANSI标准定义的共32个auto...unsigned continue for signed voiddefault goto sizeof volatile do ifwhile static 3.2 标识符所谓标识符是指常量、变量、语句...
  • 满意答案564vlaci2015.10.29采纳率:48%等级:12已帮助:6409人C语言中的标识符1) 标识符由字母、数字、下划线“_”组成,并且首字母不能是数字.2) 不能把C语言关键字作为标识符.3) 标识符长度限制8字符.(注:8字符...
  • 在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、...1、关键字(Keywords)关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字,例如 int、char、long、float、unsigned 等。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,939
精华内容 15,575
关键字:

unsigned为什么不是标识符