社区
C语言
帖子详情
unsigned char i=0x80; printf("0x%x\n", ~i>>3+1);//无符号16进制输出 char ci=0x80;
古戎烽烟
2015-08-20 11:17:35
unsigned char i=0x80;
printf("0x%x\n", ~i>>3+1);//无符号16进制输出
char ci=0x80;
printf("0x%x\n", ~ci>>3+1);
结果分别为 0x fffffff7 0x7
...全文
860
3
打赏
收藏
unsigned char i=0x80; printf("0x%x\n", ~i>>3+1);//无符号16进制输出 char ci=0x80;
unsigned char i=0x80; printf("0x%x\n", ~i>>3+1);//无符号16进制输出 char ci=0x80; printf("0x%x\n", ~ci>>3+1); 结果分别为 0x fffffff7 0x7
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
赵4老师
2015-08-21
打赏
举报
回复
理解
和
讨论
之前请先学会如何
观察
! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告:
多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 先
http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express
点开Visual C++ 2010 Express下面的语言选‘简体中文’,再点立即安装 再参考 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\output.c
fly_dragon_fly
2015-08-21
打赏
举报
回复
1) 移位操作优先级最低, 所以都是右移4位, 取反优先级最高, 最先做 2) 整形提升, uchar会提升到uint, 而char会提升到int, 所以0x80在uint中还是0x80, 而在int为0xffffff80, 它们取反的结果就不同了
二班的码农
2015-08-20
打赏
举报
回复
取反操作前,字符型数据会自动转成整形 即 i = 0x00000080 ~i 为 0xffffff7f ~i>>3+1 由于+号运算符优先级比>>位移运算符高,所以~i>>3+1等价于~i>>4,则得到0xfffffff7 ci变量也一样,先转换成整形,为0xffffff80(因为ci为有符号型字符变量,且符号位为1,转成整形时,高位补1) 之后同理
符号优先级1题
unsigned
char
i=
0x
80
;
printf
(“
0x
%x\n”, ~i>>3+1);//
无符号
16进制
输出
char
ci
=
0x
80
;
printf
(“
0x
%x\n”, ~
ci
>>3+1); 解析: 取反操作前,字符型数据会自动转成整形 即 i =
0x
00000080 ~i 为
0x
ffffff7f ~i>>3+1 由于+号运算符优先级比>&...
若有
unsigned
short a =
0x
1234,b =
0x
5678, 获取a的高字节,b的低字节组合成新值,结果为:
0x
1278
/* 若有
unsigned
short a =
0x
1234,b =
0x
5678, 获取a的高字节,b的低字节组合成新值,结果为:
0x
1278 */ #include int main(void) {
unsigned
a, b;
unsigned
t_up, t_down;
printf
("enter two
unsigned
number:\n"); scanf("%x%x"
char
c=128;
printf
("%d",c);问题
一、文章来由同属计算机储存,补码问题的延生~~二、解密答案
输出
是-128,为什么呢?
char
型变量c中存储的是128的补码:10000000。上一篇文章已经说到,对于计算机来说,存储的都是数据的补码。赋值给
char
型,debug模式下反汇编如下:
char
c = 128; 00C6446E mov byte ptr [c],80h
char
cc = c; 00C6447
(转)
char
c=128;
printf
("%d",c);问题
(转)
char
c=128;
printf
("%d",c);问题 一、文章来由 同属计算机储存,补码问题的延生~~ 二、解密 答案
输出
是-128,为什么呢?
char
型变量c中存储的是128的补码:10000000。上一篇文章已经说到,对于计算机来说,存储的都是数据的补码。 赋值给
char
型,debug模式下反汇编如下:
char
c =
unsigned
char
和signed
char
型变量的存储和表示
#include <stdio.h> int main(void) { signed
char
a = -1;
unsigned
char
b = -1;
printf
("%%d:\n");
printf
("%d\n", a);
printf
("%d\n", b);
printf
("\n%%u:\n");...
C语言
70,020
社区成员
243,265
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章