unsigned short A = 10; printf("~A = %u\n", ~A);
来源:互联网 发布:网络销售渠道有哪2种 编辑:程序博客网 时间:2024/06/15 04:10
unsigned short A = 10;
printf("~A = %u\n", ~A);
char c=128;
printf("c=%d\n",c);
第一题,~A=0xfffffff5,int值 为-11,但输出的是uint。所以输出4294967285
第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出-128。
这两道题都是在考察二进制向int或uint转换时的最高位处理。
在计算机系统中,数值一律用补码来表示(存储)。
正数的补码:与原码相同。
例如,+9的补码是00001001。
负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码
0000111按位取反为1111000;再加1,所以-7的补码是11111001。
已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取
反,然后再整个数加1。
11111111 11111111 11111111 10000000
因为符号位为1所以取反加1
10000000 00000000 00000000 01111111+1=
10000000 00000000 00000000 10000000
这就是-128的原码了~~~~
阅读全文
0 0
- unsigned short A = 10; printf("~A = %u\n", ~A);
- C语言printf("a=%#x\n",a)语句解析
- short a=a+1错误
- printf("%d %s\n",a,a);
- printf("a=%d\nb=%d\nc=%d\n",a,b,c);
- unsigned short *Sum( unsigned char a,unsigned char b);关于指针的一些思考
- int a[5]={1,2,3,4,5};printf("%d\n", *((int*)(&a+1)-2);
- printf("%d,%d,%d/n",a,++a,a++)
- 若有 unsigned short a = 0x1234,b = 0x5678, 获取a的高字节,b的低字节组合成新值,结果为:0x1278
- a(n+2)-4a(n+1)+4a(n) = 0 现在知道a(0) = x, a(10^8) = y, 求a((10^8)/2)
- if和if else的区别if(a>=b&&b>=c) printf("&d\n",a);
- hdu4291 A Short problem
- HDU4291-- A Short problem
- A Short problem HDU4291
- hdu4291 A Short problem
- 关于C语言的printf("%d,%d,%d,%d\n",a,++a,a--,a--);
- 如何理解main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);34;}",34);}
- unsigned a:1;
- 防火墙技术原理学习笔记
- Linux下基本命令
- 2017 XDCTF Upload
- bzoj 1230 lites 开关灯 线段树巧妙应用
- Spring Boot初体验
- unsigned short A = 10; printf("~A = %u\n", ~A);
- Jdk9更新导致Eclipse启动不了(版本冲突)
- equals方法类中重写
- Ubuntu 16 永久修改ulimit中的max file open限制
- HDU
- while(!Die())
- shell位置参数和特殊变量
- swift多线程
- 信息列表+上传文件