无符号数与有符号数的转换

废话不多说,直接干活!

强制类型转换的实质(普通数据类型):

1、保持位值不变,只是改变了解释这些位置的方式(最高位是否看成符号位来解释等等)

2、将short 或者 short 类型数据转化为 unsigned 类型时,先将数据转换为 int 类型,再将int 类型 转换为 unsigned int 类型。

例如:

unsigned short   c = 12345;

short                  a = -12345;

unsigned short   b = a;

c 的补码: 1001 1100 0000 1100

a 的补码: 1001 1100 0000 1100

b 的补码: 1001 1100 0000 1100

打印 b 的值为 53191。

可见它们在内存中的存在的形式都是一样的,只是解释不同而已。

无符号数与有符号数进行比较:

int a = -1; unsigned int b = 1;           ------->  a > b

char a = -1; unsigned char b = 1;    ------->  a < b

int a = -1; unsigned charb = -1;           ------->  a < b

char a = -1; unsigned int b = -1;    ------->  a = b

结论:

碰到unsigned int 类型,都转化为 unsigned int 类型进行比较, 其它情况均转为 int 类型数据进行比较

原文地址:https://www.cnblogs.com/hujingzheng/p/11613769.html

时间: 2024-12-19 04:39:09

无符号数与有符号数的转换的相关文章

注意sizeof()返回的数无符号数,有符号数遇到无符号数时变成无符号数

预测一下这道题的结果,注意unsigned与signed #include<iostream> #include<stdio.h> using namespace std; int arr[]={1,2,3,4,5}; int main(){ for(int i=-1;i<sizeof(arr)/sizeof(arr[0]) - 1;i++) cout<<arr[i+1]<<endl; } sizeof()返回的值是无符号数,有符号数遇到无符号数变成无

C语言无符号数跟有符号数之间运算

先来看一个程序: 运行结果: 刚刚无意中发现的,第一反应觉得有问题,n是无符号型的,不可能等于-1,因此不可能跳出循环,但结果却跳出了循环,也就是说无符号数=-1? 以下是我的理解: 实际上,在符号数跟无符号数的比较过程中:符号数会转换成无符号数.本质上说,符号数跟无符号数在计算机中都是用补码表示的,只是解释的方式不同罢了,而比较的是它们的二进制各个位是否都相同(不管最高位是不是符号位). 再看: 另外,加减运算也是同样的道理,补码之间进行加减运算,把最后的结果根据不同的解释方式来解释(符号数输

有符号数和无符号数

摘抄自:http://www.cnblogs.com/glacierh/archive/2013/07/16/3194658.html 1.      补码 在计算机中无符号数用原码表示,有符号数用补码表示.w位补码表示的值为: 最高位 也称符号位,1表示负数,0表示正数,符号位为0时,和无符号数的表示是相同的,以下是4位补码的示例: 0101 = -0*23 + 1*22 + 0*21 + 1*20 = 5 1101 = -1*23 + 1*22 + 0*21 + 1*20 = -3 w位的补

有符号数和无符号数负数(转)

有符号数和无符号数负数 理解有符号数和无符号数负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答. 一种是教科书,它会告诉你:计算机用"补码"表示负数.可是有关"补码"的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切.再者,用"补码"表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算.却并没有告诉你为什么用这个公式就可以和答案? 另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高

C语言之有符号数和无符号数

我们知道,在C语言中存在无符号数和有符号数(一些高级语言如Java里面是没有无符号数的),但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机里面都是0或者1,但是在我们的实际使用中有时候需要使用有符号数来表示一个整数,因此我们规定,当最高位为1的时,表示为负数,最高位为0时,表示为正数. 1:有符号数和无符号数在数值上的区别. 有符号数的最高位用来表示符号,所以在最大的数值上,有符号数的最大值小于无符号数.以一个字节为例: 有符号数的取值范围为:-128 - 0 - 127 无符

理解有符号数和无符号数

负数在计算机中如何表示呢? 一种是教科书,它会告诉你:计算机用"补码"表示负数.可是有关"补码"的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切.再者,用"补码"表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算.却并没有告诉你为什么用这个公式就可以和答案? 另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是0,表示正数,最高位是1,表示负数.这种说法本身没错,可是如果没有下文,那么它

C语言中 有符号数、无符号数、整数溢出 (转)

[cpp] view plain copy print? #include<stdio.h> void main() { int l=-1; unsigned int c=135; printf("%u\n",l+c); } 这个的结果134,而不是我之前认为的很大的正数,实际上需要注意的是-1(0xffffffff)被提升为unsigned int后是一个差1就溢出的unsigned int,所以相加后结果是134.但是如果l=-10000,那么结果就真是一个很大的正数了

有符号数与无符号数比较的坑

前言 在c/c++ 的项目编译时经常会遇到 “comp.c:59:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]” 这种错误.作为一个”合格的程序员“ 对这种编译告警,通常的处理是忽略,毕竟大家一致的观点是:只有“warning”不算问题! 下面给出一个小case: #include <stdio.h> int sum_elements(int a[], unsig

02_有符号数与无符号数

有符号数与无符号数 1.计算机中的符号位 编程实验: #include <stdio.h> int main() { char c = -5; short s = 6; int i = -7; printf("%d\n", ( (c & 0x80) != 0 )); printf("%d\n", ( (s & 0x8000) != 0 )); printf("%d\n", ( (i & 0x80000000)